package client import ( "encoding/hex" "github.com/stretchr/testify/assert" "strings" "testing" ) var hd = clientHelloFields{ random: decodeHex("ed0117085ed70be0799b1fc96af7f675d4747f86cd03bb36392e03e8d1b0e9a0"), sessionId: decodeHex("47485f67c59ca787009bba83ede4da4f2397169c696c275d96c4c7af803019b9"), x25519KeyShare: decodeHex("d395003163a6f751b4c68a67bcec1f883885a7ada8a63fda389b29986e51fa44"), serverName: "github.com", } //func TestFirefoxJA3(t *testing.T) { // result := common.AddRecordLayer((&Firefox{}).composeClientHello(hd), common.Handshake, common.VersionTLS11) // // hello := tlsx.ClientHelloBasic{} // err := hello.Unmarshal(result) // assert.Nil(t, err) // // digest := ja3.DigestHex(&hello) // assert.Equal(t, "ad55557b7cbd735c2627f7ebb3b3d493", digest) //} func TestFirefoxComposeClientHello(t *testing.T) { result := hex.EncodeToString((&Firefox{}).composeClientHello(hd)) target := "010001fc0303ed0117085ed70be0799b1fc96af7f675d4747f86cd03bb36392e03e8d1b0e9a02047485f67c59ca787009bba83ede4da4f2397169c696c275d96c4c7af803019b90022130113031302c02bc02fcca9cca8c02cc030c00ac009c013c014009c009d002f0035010001910000000f000d00000a6769746875622e636f6d00170000ff01000100000a000e000c001d00170018001901000101000b000201000010000e000c02683208687474702f312e310005000501000000000022000a000804030503060302030033006b0069001d0020d395003163a6f751b4c68a67bcec1f883885a7ada8a63fda389b29986e51fa440017004104c49751010e35370cf8e89c23471b40579387b3dd5ce6862c9850b121632b527128b75ef7051c5284ae94894d846cc3dc88ce01ce49b605167f63473c1d772b47002b00050403040303000d0018001604030503060308040805080604010501060102030201001c0002400100150096000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // skip random secp256r1 secp256r1 := "04c49751010e35370cf8e89c23471b40579387b3dd5ce6862c9850b121632b527128b75ef7051c5284ae94894d846cc3dc88ce01ce49b605167f63473c1d772b47" start := strings.Index(target, secp256r1) target = strings.Replace(target, secp256r1, "", 1) result = strings.Replace(result, result[start:start+len(secp256r1)], "", 1) assert.Equal(t, target, result) }