ricmoo / GMEllipticCurveCrypto

Elliptic Curve Cryptography library for iOS (ECDSA and ECDH)
BSD 2-Clause "Simplified" License
122 stars 46 forks source link

Shared secret values are not match #19

Open dtco-kimi opened 7 years ago

dtco-kimi commented 7 years ago

Here are my private keys and public keys

prv1: D7530AB9D444ABB5B16AA45EE8169009E69E03E205F53BF8C05CBE74D67D35A0
pub1: 0413AC625843EA89D3D8B80A1885CE0667061150987788BAA589CB33186440C83A1E80EE7B11B48B3F3DE0EFC1320ABB966EECC2CB597CF61F7E8A33D390E4252F

prv2: 293F03DE5E01277563DC1F91896097CB3E13DA250788BC48B69D77CFE2862E0C
pub2: 0431ED7C796FA3CAF480557A274A621DC183D2BE508551EE018BA307DF82D678FCAAD36E11999DC85499270DC48DEA698BC322715A6FDDF79B79C74B9F171D94C6

Here is my code snippet

BTCKey* ecKey1 = [[BTCKey alloc] initWithPrivateKey:[Utility hexStringToBytes: @"d7530ab9d444abb5b16aa45ee8169009e69e03e205f53bf8c05cbe74d67d35a0"]];
BTCKey* ecKey2 = [[BTCKey alloc] initWithPrivateKey:[Utility hexStringToBytes: @"293f03de5e01277563dc1f91896097cb3e13da250788bc48b69d77cfe2862e0c"]];

GMEllipticCurveCrypto* ecc1 = [GMEllipticCurveCrypto cryptoForKey:ecKey1.privateKey];
NSData* shareScrect1 = [ecc1 sharedSecretForPublicKey:ecKey2.compressedPublicKey];
// shareScrect1 ==> 7E0D7CE5EC530853F65C23A2A92832A489D5D9771E4B87C1F5E64614201F8170

GMEllipticCurveCrypto* ecc2 = [GMEllipticCurveCrypto cryptoForKey:ecKey2.privateKey];
NSData* shareScrect2 = [ecc2 sharedSecretForPublicKey:ecKey1.compressedPublicKey];
// shareScrect2 ==> 861B25E187E384564DE5D2BD8D1609F0F05DA5E94D4E98FD56831356BF7BA3E8

What happened? Did I do anything wrong? A compressed public key seems like the only choice for 'sharedSecretForPublicKey:'. Is this the reason?

Thanks.