diff --git a/nip44.go b/nip44.go index 80966ba..e4172c4 100644 --- a/nip44.go +++ b/nip44.go @@ -63,7 +63,7 @@ func Encrypt(conversationKey []byte, plaintext string, options *EncryptOptions) if ciphertext, err = chacha20_(enc, nonce, []byte(padded)); err != nil { return "", err } - hmac_ = sha256Hmac(auth, ciphertext) + hmac_ = sha256Hmac(auth, ciphertext, salt) concat = append(concat, []byte{byte(version)}...) concat = append(concat, salt...) concat = append(concat, ciphertext...) @@ -101,7 +101,7 @@ func Decrypt(conversationKey []byte, ciphertext string) (string, error) { if enc, nonce, auth, err = messageKeys(conversationKey, salt); err != nil { return "", err } - if !bytes.Equal(hmac_, sha256Hmac(auth, ciphertext_)) { + if !bytes.Equal(hmac_, sha256Hmac(auth, ciphertext_, salt)) { return "", errors.New("invalid hmac") } if padded, err = chacha20_(enc, nonce, ciphertext_); err != nil { @@ -141,8 +141,9 @@ func randomBytes(n int) ([]byte, error) { return buf, nil } -func sha256Hmac(key []byte, ciphertext []byte) []byte { +func sha256Hmac(key []byte, ciphertext []byte, nonce []byte) []byte { h := hmac.New(sha256.New, key) + h.Write(nonce) h.Write(ciphertext) return h.Sum(nil) } diff --git a/nip44_test.go b/nip44_test.go index dac04d3..8382529 100644 --- a/nip44_test.go +++ b/nip44_test.go @@ -212,10 +212,10 @@ func TestCryptPriv001(t *testing.T) { assertCryptPriv(t, "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000002", - "c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5", + "c41c775356fd92eadc63ff5a0dc1da211b268cbea22316767095b2871ea1412d", "0000000000000000000000000000000000000000000000000000000000000001", "a", - "AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYNpT9ESckRbRUY7bUF5P+1rObpA4BNoksAUQ8myMDd9/37W/J2YHvBpRjvy9uC0+ovbpLc0WLaMFieqAMdIYqR14", + "AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABee0G5VSK0/9YypIObAtDKfYEAjD35uVkHyB0F4DwrcNaCXlCWZKaArsGrY6M9wnuTMxWfp1RTN9Xga8no+kF5Vsb", ) } @@ -223,10 +223,10 @@ func TestCryptPriv002(t *testing.T) { assertCryptPriv(t, "0000000000000000000000000000000000000000000000000000000000000002", "0000000000000000000000000000000000000000000000000000000000000001", - "c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5", + "c41c775356fd92eadc63ff5a0dc1da211b268cbea22316767095b2871ea1412d", "f00000000000000000000000000000f00000000000000000000000000000000f", "๐Ÿ•๐Ÿซƒ", - "AvAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAPKY68BwdF7PIT205jBoaZHSs7OMpKsULW5F5ClOJWiy6XjZy7s2v85KugYmbBKgEC2LytbXbxkr7Jpgfk529K3/pP", + "AvAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAPSKSK6is9ngkX2+cSq85Th16oRTISAOfhStnixqZziKMDvB0QQzgFZdjLTPicCJaV8nDITO+QfaQ61+KbWQIOO2Yj", ) } @@ -234,10 +234,10 @@ func TestCryptPriv003(t *testing.T) { assertCryptPriv(t, "5c0c523f52a5b6fad39ed2403092df8cebc36318b39383bca6c00808626fab3a", "4b22aa260e4acb7021e32f38a6cdf4b673c6a277755bfce287e370c924dc936d", - "94da47d851b9c1ed33b3b72f35434f56aa608d60e573e9c295f568011f4f50a4", + "3e2b52a63be47d34fe0a80e34e73d436d6963bc8f39827f327057a9986c20a45", "b635236c42db20f021bb8d1cdff5ca75dd1a0cc72ea742ad750f33010b24f73b", "่กจใƒใ‚A้ท—ล’รฉ๏ผข้€รœรŸยชฤ…รฑไธ‚ใ€๐ €€", - "ArY1I2xC2yDwIbuNHN/1ynXdGgzHLqdCrXUPMwELJPc7yuU7XwJ8wCYUrq4aXX86HLnkMx7fPFvNeMk0uek9ma01magfEBIf+vJvZdWKiv48eUu9Cv31plAJsH6kSIsGc5TVYBYipkrQUNRxxJA15QT+uCURF96v3XuSS0k2Pf108AI=", + "ArY1I2xC2yDwIbuNHN/1ynXdGgzHLqdCrXUPMwELJPc7s7JqlCMJBAIIjfkpHReBPXeoMCyuClwgbT419jUWU1PwaNl4FEQYKCDKVJz+97Mp3K+Q2YGa77B6gpxB/lr1QgoqpDf7wDVrDmOqGoiPjWDqy8KzLueKDcm9BVP8xeTJIxs=", ) } @@ -245,10 +245,10 @@ func TestCryptPriv004(t *testing.T) { assertCryptPriv(t, "8f40e50a84a7462e2b8d24c28898ef1f23359fff50d8c509e6fb7ce06e142f9c", "b9b0a1e9cc20100c5faa3bbe2777303d25950616c4c6a3fa2e3e046f936ec2ba", - "ab99c122d4586cdd5c813058aa543d0e7233545dbf6874fc34a3d8d9a18fbbc3", + "d5a2f879123145a4b291d767428870f5a8d9e5007193321795b40183d4ab8c2b", "b20989adc3ddc41cd2c435952c0d59a91315d8c5218d5040573fc3749543acaf", "ability๐Ÿค็š„ ศบศพ", - "ArIJia3D3cQc0sQ1lSwNWakTFdjFIY1QQFc/w3SVQ6yvPSc+7YCIFTmGk5OLuh1nhl6TvID7sGKLFUCWRW1eRfV/0a7sT46N3nTQzD7IE67zLWrYqGnE+0DDNz6sJ4hAaFrT", + "ArIJia3D3cQc0sQ1lSwNWakTFdjFIY1QQFc/w3SVQ6yvbG2S0x4Yu86QGwPTy7mP3961I1XqB6SFFTzqDZZavhxoWMj7mEVGMQIsh2RLWI5EYQaQDIePSnXPlzf7CIt+voTD", ) } @@ -256,10 +256,10 @@ func TestCryptPriv005(t *testing.T) { assertCryptPriv(t, "875adb475056aec0b4809bd2db9aa00cff53a649e7b59d8edcbf4e6330b0995c", "9c05781112d5b0a2a7148a222e50e0bd891d6b60c5483f03456e982185944aae", - "a449f2a85c6d3db0f44c64554a05d11a3c0988d645e4b4b2592072f63662f422", + "3b15c977e20bfe4b8482991274635edd94f366595b1a3d2993515705ca3cedb8", "8d4442713eb9d4791175cb040d98d6fc5be8864d6ec2f89cf0895a2b2b72d1b1", "pepper๐Ÿ‘€ั—ะถะฐะบ", - "Ao1EQnE+udR5EXXLBA2Y1vxb6IZNbsL4nPCJWisrctGx1TkkMfiHJxEeSdQ/4Rlaghn0okDCNYLihBsHrDzBsNRC27APmH9mmZcpcg66Mb0exH9V5/lLBWdQW+fcY9GpvXv0", + "Ao1EQnE+udR5EXXLBA2Y1vxb6IZNbsL4nPCJWisrctGxY3AduCS+jTUgAAnfvKafkmpy15+i9YMwCdccisRa8SvzW671T2JO4LFSPX31K4kYUKelSAdSPwe9NwO6LhOsnoJ+", ) } @@ -267,10 +267,10 @@ func TestCryptPriv006(t *testing.T) { assertCryptPriv(t, "eba1687cab6a3101bfc68fd70f214aa4cc059e9ec1b79fdb9ad0a0a4e259829f", "dff20d262bef9dfd94666548f556393085e6ea421c8af86e9d333fa8747e94b3", - "decde9938ffcb14fa7ff300105eb1bf239469af9baf376e69755b9070ae48c47", + "4f1538411098cf11c8af216836444787c462d47f97287f46cf7edb2c4915b8a5", "2180b52ae645fcf9f5080d81b1f0b5d6f2cd77ff3c986882bb549158462f3407", "( อกยฐ อœส– อกยฐ)", - "AiGAtSrmRfz59QgNgbHwtdbyzXf/PJhogrtUkVhGLzQHiR8Hljs6Nl/XsNDAmCz6U1Z3NUGhbCtczc3wXXxDzFkjjMimxsf/74OEzu7LphUadM9iSWvVKPrNXY7lTD0B2muz", + "AiGAtSrmRfz59QgNgbHwtdbyzXf/PJhogrtUkVhGLzQHv4qhKQwnFQ54OjVMgqCea/Vj0YqBSdhqNR777TJ4zIUk7R0fnizp6l1zwgzWv7+ee6u+0/89KIjY5q1wu6inyuiv", ) } @@ -278,10 +278,10 @@ func TestCryptPriv007(t *testing.T) { assertCryptPriv(t, "d5633530f5bcfebceb5584cfbbf718a30df0751b729dd9a789b9f30c0587d74e", "b74e6a341fb134127272b795a08b59250e5fa45a82a2eb4095e4ce9ed5f5e214", - "c6f2fde7aa00208c388f506455c31c3fa07caf8b516d43bf7514ee19edcda994", + "75fe686d21a035f0c7cd70da64ba307936e5ca0b20710496a6b6b5f573377bdd", "e4cd5f7ce4eea024bc71b17ad456a986a74ac426c2c62b0a15eb5c5c8f888b68", "ู…ูู†ูŽุงู‚ูŽุดูŽุฉู ุณูุจูู„ู ุงูุณู’ุชูุฎู’ุฏูŽุงู…ู ุงู„ู„ูู‘ุบูŽุฉู ูููŠ ุงู„ู†ูู‘ุธูู…ู ุงู„ู’ู‚ูŽุงุฆูู…ูŽุฉู ูˆูŽูููŠู… ูŠูŽุฎูุตูŽู‘ ุงู„ุชูŽู‘ุทู’ุจููŠู‚ูŽุงุชู ุงู„ู’ุญุงุณููˆุจููŠูŽู‘ุฉูุŒ", - "AuTNX3zk7qAkvHGxetRWqYanSsQmwsYrChXrXFyPiItohfde4vHVRHUupr+Glh9JW4f9EY+w795hvRZbixs0EQgDZ7zwLlymVQI3NNvMqvemQzHUA1I5+9gSu8XSMwX9gDCUAjUJtntCkRt9+tjdy2Wa2ZrDYqCvgirvzbJTIC69Ve3YbKuiTQCKtVi0PA5ZLqVmnkHPIqfPqDOGj/a3dvJVzGSgeijcIpjuEgFF54uirrWvIWmTBDeTA+tlQzJHpB2wQnUndd2gLDb8+eKFUZPBifshD3WmgWxv8wRv6k3DeWuWEZQ70Z+YDpgpeOzuzHj0MDBwMAlY8Qq86Rx6pxY76PLDDfHh3rE2CHJEKl2MhDj7pGXao2o633vSRd9ueG8W", + "AuTNX3zk7qAkvHGxetRWqYanSsQmwsYrChXrXFyPiItoIBsWu1CB+sStla2M4VeANASHxM78i1CfHQQH1YbBy24Tng7emYW44ol6QkFD6D8Zq7QPl+8L1c47lx8RoODEQMvNCbOk5ffUV3/AhONHBXnffrI+0025c+uRGzfqpYki4lBqm9iYU+k3Tvjczq9wU0mkVDEaM34WiQi30MfkJdRbeeYaq6kNvGPunLb3xdjjs5DL720d61Flc5ZfoZm+CBhADy9D9XiVZYLKAlkijALJur9dATYKci6OBOoc2SJS2Clai5hOVzR0yVeyHRgRfH9aLSlWW5dXcUxTo7qqRjNf8W5+J4jF4gNQp5f5d0YA4vPAzjBwSP/5bGzNDslKfcAH", ) } @@ -289,21 +289,21 @@ func TestCryptPriv008(t *testing.T) { assertCryptPriv(t, "d5633530f5bcfebceb5584cfbbf718a30df0751b729dd9a789b9f30c0587d74e", "b74e6a341fb134127272b795a08b59250e5fa45a82a2eb4095e4ce9ed5f5e214", - "c6f2fde7aa00208c388f506455c31c3fa07caf8b516d43bf7514ee19edcda994", - "38d1ca0abef9e5f564e89761a86cee04574b6825d3ef2063b10ad75899e4b023", - "ุงู„ูƒู„ ููŠ ุงู„ู…ุฌู…ูˆ ุนุฉ (5)", - "AjjRygq++eX1ZOiXYahs7gRXS2gl0+8gY7EK11iZ5LAjTHmhdBC3meTY4A7Lv8s8B86MnmlUBJ8ebzwxFQzDyVCcdSbWFaKe0gigEBdXew7TjrjH8BCpAbtYjoa4YHa8GNjj7zH314ApVnwoByHdLHLB9Vr6VdzkxcJgA6oL4MAsRLg=", + "75fe686d21a035f0c7cd70da64ba307936e5ca0b20710496a6b6b5f573377bdd", + "e4cd5f7ce4eea024bc71b17ad456a986a74ac426c2c62b0a15eb5c5c8f888b68", + "ู…ูู†ูŽุงู‚ูŽุดูŽุฉู ุณูุจูู„ู ุงูุณู’ุชูุฎู’ุฏูŽุงู…ู ุงู„ู„ูู‘ุบูŽุฉู ูููŠ ุงู„ู†ูู‘ุธูู…ู ุงู„ู’ู‚ูŽุงุฆูู…ูŽุฉู ูˆูŽูููŠู… ูŠูŽุฎูุตูŽู‘ ุงู„ุชูŽู‘ุทู’ุจููŠู‚ูŽุงุชู ุงู„ู’ุญุงุณููˆุจููŠูŽู‘ุฉูุŒ", + "AuTNX3zk7qAkvHGxetRWqYanSsQmwsYrChXrXFyPiItoIBsWu1CB+sStla2M4VeANASHxM78i1CfHQQH1YbBy24Tng7emYW44ol6QkFD6D8Zq7QPl+8L1c47lx8RoODEQMvNCbOk5ffUV3/AhONHBXnffrI+0025c+uRGzfqpYki4lBqm9iYU+k3Tvjczq9wU0mkVDEaM34WiQi30MfkJdRbeeYaq6kNvGPunLb3xdjjs5DL720d61Flc5ZfoZm+CBhADy9D9XiVZYLKAlkijALJur9dATYKci6OBOoc2SJS2Clai5hOVzR0yVeyHRgRfH9aLSlWW5dXcUxTo7qqRjNf8W5+J4jF4gNQp5f5d0YA4vPAzjBwSP/5bGzNDslKfcAH", ) } -func TestCryptPriv009(t *testing.T) { +func TestCryptPriv009X(t *testing.T) { assertCryptPriv(t, "d5633530f5bcfebceb5584cfbbf718a30df0751b729dd9a789b9f30c0587d74e", "b74e6a341fb134127272b795a08b59250e5fa45a82a2eb4095e4ce9ed5f5e214", - "c6f2fde7aa00208c388f506455c31c3fa07caf8b516d43bf7514ee19edcda994", - "4f1a31909f3483a9e69c8549a55bbc9af25fa5bbecf7bd32d9896f83ef2e12e0", - "๐–‘๐–†๐–Ÿ๐–ž ็คพๆœƒ็ง‘ๅญธ้™ข่ชžๅญธ็ ”็ฉถๆ‰€", - "Ak8aMZCfNIOp5pyFSaVbvJryX6W77Pe9MtmJb4PvLhLg/25Q5uBC88jl5ghtEREXX6o4QijPzM0uwmkeQ54/6aIqUyzGNVdryWKZ0mee2lmVVWhU+26X6XGFQ5DGRn+1v0POsFUCZ/REh35+beBNHnyvjxD/rbrMfhP2Blc8X5m8Xvk=", + "75fe686d21a035f0c7cd70da64ba307936e5ca0b20710496a6b6b5f573377bdd", + "38d1ca0abef9e5f564e89761a86cee04574b6825d3ef2063b10ad75899e4b023", + "ุงู„ูƒู„ ููŠ ุงู„ู…ุฌู…ูˆ ุนุฉ (5)", + "AjjRygq++eX1ZOiXYahs7gRXS2gl0+8gY7EK11iZ5LAjbOTrlfrxak5Lki42v2jMPpLSicy8eHjsWkkMtF0i925vOaKG/ZkMHh9ccQBdfTvgEGKzztedqDCAWb5TP1YwU1PsWaiiqG3+WgVvJiO4lUdMHXL7+zKKx8bgDtowzz4QAwI=", ) } @@ -311,10 +311,21 @@ func TestCryptPriv010(t *testing.T) { assertCryptPriv(t, "d5633530f5bcfebceb5584cfbbf718a30df0751b729dd9a789b9f30c0587d74e", "b74e6a341fb134127272b795a08b59250e5fa45a82a2eb4095e4ce9ed5f5e214", - "c6f2fde7aa00208c388f506455c31c3fa07caf8b516d43bf7514ee19edcda994", + "75fe686d21a035f0c7cd70da64ba307936e5ca0b20710496a6b6b5f573377bdd", + "4f1a31909f3483a9e69c8549a55bbc9af25fa5bbecf7bd32d9896f83ef2e12e0", + "๐–‘๐–†๐–Ÿ๐–ž ็คพๆœƒ็ง‘ๅญธ้™ข่ชžๅญธ็ ”็ฉถๆ‰€", + "Ak8aMZCfNIOp5pyFSaVbvJryX6W77Pe9MtmJb4PvLhLgh/TsxPLFSANcT67EC1t/qxjru5ZoADjKVEt2ejdx+xGvH49mcdfbc+l+L7gJtkH7GLKpE9pQNQWNHMAmj043PAXJZ++fiJObMRR2mye5VHEANzZWkZXMrXF7YjuG10S1pOU=", + ) +} + +func TestCryptPriv011(t *testing.T) { + assertCryptPriv(t, + "d5633530f5bcfebceb5584cfbbf718a30df0751b729dd9a789b9f30c0587d74e", + "b74e6a341fb134127272b795a08b59250e5fa45a82a2eb4095e4ce9ed5f5e214", + "75fe686d21a035f0c7cd70da64ba307936e5ca0b20710496a6b6b5f573377bdd", "a3e219242d85465e70adcd640b564b3feff57d2ef8745d5e7a0663b2dccceb54", "๐Ÿ™ˆ ๐Ÿ™‰ ๐Ÿ™Š 0๏ธโƒฃ 1๏ธโƒฃ 2๏ธโƒฃ 3๏ธโƒฃ 4๏ธโƒฃ 5๏ธโƒฃ 6๏ธโƒฃ 7๏ธโƒฃ 8๏ธโƒฃ 9๏ธโƒฃ ๐Ÿ”Ÿ Powerู„ูู„ูุตู‘ุจูู„ูู„ุตู‘ุจูุฑุฑู‹ เฅฃ เฅฃh เฅฃ เฅฃๅ†—", - "AqPiGSQthUZecK3NZAtWSz/v9X0u+HRdXnoGY7LczOtU9bUC2ji2A2udRI2VCEQZ7IAmYRRgxodBtd5Yi/5htCUczf1jLHxIt9AhVAZLKuRgbWOuEMq5RBybkxPsSeAkxzXVOlWHZ1Febq5ogkjqY/6Xj8CwwmaZxfbx+d1BKKO3Wa+IFuXwuVAZa1Xo+fan+skyf+2R5QSj10QGAnGO7odAu/iZ9A28eMoSNeXsdxqy1+PRt5Zk4i019xmf7C4PDGSzgFZSvQ2EzusJN5WcsnRFmF1L5rXpX1AYo8HusOpWcGf9PjmFbO+8spUkX1W/T21GRm4o7dro1Y6ycgGOA9BsiQ==", + "AqPiGSQthUZecK3NZAtWSz/v9X0u+HRdXnoGY7LczOtUf05aMF89q1FLwJvaFJYICZoMYgRJHFLwPiOHce7fuAc40kX0wXJvipyBJ9HzCOj7CgtnC1/cmPCHR3s5AIORmroBWglm1LiFMohv1FSPEbaBD51VXxJa4JyWpYhreSOEjn1wd0lMKC9b+osV2N2tpbs+rbpQem2tRen3sWflmCqjkG5VOVwRErCuXuPb5+hYwd8BoZbfCrsiAVLd7YT44dRtKNBx6rkabWfddKSLtreHLDysOhQUVOp/XkE7OzSkWl6sky0Hva6qJJ/V726hMlomvcLHjE41iKmW2CpcZfOedg==", ) }