def test_32(self): self.assertEqual( GOST341194( b'This is message, length=32 bytes', "GostR3411_94_CryptoProParamSet", ).hexdigest(), "eb48de3e89e71bcb695fc752d617fae757f34fa77fa58ee114c5bdb7f7c2ef2c", )
def test_message_digest(self): self.assertEqual( GOST341194( b'message digest', "GostR3411_94_CryptoProParamSet", ).hexdigest(), "a01b72299bc39a540fd672a99a72b4bdfe74417386986efaeb01a42add4160bc", )
def test_dog(self): self.assertEqual( GOST341194( b'The quick brown fox jumps over the lazy dog', "GostR3411_94_CryptoProParamSet", ).hexdigest(), "760a8365d570476e787254761be7656774021b1f3de56f588c501a364a290490", )
def test_rfc50(self): self.assertEqual( GOST341194( b'Suppose the original message has length = 50 bytes', "GostR3411_94_TestParamSet", ).hexdigest(), "0852f5623b89dd57aeb4781fe54df14eeafbc1350613763a0d770aa657ba1a47", )
def test_dog(self): self.assertEqual( GOST341194( b'The quick brown fox jumps over the lazy dog', "GostR3411_94_TestParamSet", ).hexdigest(), "94421f6d370fa1d16ba7ac5e31296529c968047dca9bf4258ac59a0c41fab777", )
def test_cog(self): self.assertEqual( GOST341194( b'The quick brown fox jumps over the lazy cog', "GostR3411_94_TestParamSet", ).hexdigest(), "45c4ee4ee1d25091312135540d6702e6677f7a73b5da31e10b8bb7aadac4eba3", )
def test_50(self): self.assertEqual( GOST341194( b'Suppose the original message has length = 50 bytes', "GostR3411_94_CryptoProParamSet", ).hexdigest(), "1150a63031dc611a5f5e40d93153f74ebde8216f6792c25a91cfcabc5c0c73c3", )
def test_rfc32(self): self.assertEqual( GOST341194( b'This is message, length=32 bytes', "GostR3411_94_TestParamSet", ).hexdigest(), "faff37a615a816691cff3ef8b68ca247e09525f39f8119832eb81975d366c4b1", )
def sign(private_key, data): """ Sign data :param private_key: private key to sign with :type private_key: bytes, 32 bytes :param bytes data: arbitrary data :return: signature :rtype: bytes, 64 bytes """ curve = GOST3410Curve(*CURVE_PARAMS[DEFAULT_CURVE]) return _sign( curve, bytes2long(private_key[::-1]), GOST341194(data, GOST341194_SBOX).digest(), )
def verify(public_key, data, signature): """ Verify signature :param public_key: public key to verify with :type public_key: bytes, 64 bytes :param bytes data: arbitrary data :type signature: bytes, 64 bytes :rtype: bool """ curve = GOST3410Curve(*CURVE_PARAMS[DEFAULT_CURVE]) public_key = public_key[::-1] return _verify( curve, bytes2long(public_key[32:]), bytes2long(public_key[:32]), GOST341194(data, GOST341194_SBOX).digest(), signature, )
def kek(curve, private_key, ukm, pubkey): """ Make Diffie-Hellman computation :param GOST3410Curve curve: curve to use :param long private_key: private key :param ukm: UKM value (VKO-factor) :type ukm: bytes, 8 bytes :param pubkey: public key's part :type pubkey: (long, long) :return: Key Encryption Key (shared key) :rtype: bytes, 32 bytes Shared Key Encryption Key computation is based on :rfc:`4357` VKO GOST 34.10-2001 with little-endian hash output. """ key = curve.exp(private_key, pubkey[0], pubkey[1]) key = curve.exp(bytes2long(24 * b'\x00' + ukm), key[0], key[1]) return GOST341194((long2bytes(key[1]) + long2bytes(key[0]))[::-1], "GostR3411_94_CryptoProParamSet").digest()[::-1]
def test_Us(self): self.assertEqual( GOST341194(128 * b'U', "GostR3411_94_CryptoProParamSet").hexdigest(), "e8c449f608104c512710cd37fded920df1e86b211623fa27f4bb914661c74a1c", )
def test_a(self): self.assertEqual( GOST341194(b'a', "GostR3411_94_CryptoProParamSet").hexdigest(), "1130402fcfaaf1ef3c13e3173f105a715580f7c97900af37bf832128dd524ce7", )
def test_Us(self): self.assertEqual( GOST341194(128 * b'U', "GostR3411_94_TestParamSet").hexdigest(), "a43357fee8a926d9522a06870a66251c553e2774a0851d0cef0c1825eda3a353", )
def test_message_digest(self): self.assertEqual( GOST341194(b'message digest', "GostR3411_94_TestParamSet").hexdigest(), "4d9a88a416de2fdb72de483f27652b5869243dec59be0cb6992c8fb1ec3444ad", )
def test_abc(self): self.assertEqual( GOST341194(b'abc', "GostR3411_94_TestParamSet").hexdigest(), "1dd5a4067c49703b75bc75c9290f5ecbb5eb85229e7277a2b2b14fc4484313f3", )
def test_a(self): self.assertEqual( GOST341194(b'a', "GostR3411_94_TestParamSet").hexdigest(), "dd14f362cefd49f873a5c644431b87219c3449661f808ac8e9667c369e532cd4", )
def test_abc(self): self.assertEqual( GOST341194(b'abc', "GostR3411_94_CryptoProParamSet").hexdigest(), "2cd42ff986293b167e994381ed59747414dd24953677762d39d718bf6d0585b2", )
def test_empty(self): self.assertEqual( GOST341194(b'', "GostR3411_94_CryptoProParamSet").hexdigest(), "c056d64c2383c44a58139c9b560111ac133e43fb840f838714840ca33c5f1e98", )
def test_empty(self): self.assertEqual( GOST341194(b'', "GostR3411_94_TestParamSet").hexdigest(), "8d0f49492c91f45a68ff5c05d2c2b4ab78027b9aab5ce3feff5267c49cb985ce", )