Skip to content

Commit

Permalink
Add error messages to Curve25519PrivateKeyEncodingTest
Browse files Browse the repository at this point in the history
  • Loading branch information
vanitasvitae committed May 22, 2024
1 parent 8f258b1 commit 53f22c2
Showing 1 changed file with 16 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,22 @@ private void jca_verifySecretKeyReverseEncoding()
// Legacy key uses reversed encoding
PGPKeyPair pgpECDHKeyPair = new JcaPGPKeyPair(PublicKeyAlgorithmTags.ECDH, kp, date);
byte[] encodedECDHPrivateKey = pgpECDHKeyPair.getPrivateKey().getPrivateKeyDataPacket().getEncoded();
isTrue(containsSubsequence(encodedECDHPrivateKey, Arrays.reverse(rawPrivateKey)));
isTrue("ECDH Curve25519Legacy (X25519) key MUST encode secret key in 'reverse' (big-endian MPI encoding) (JCE implementation)",
containsSubsequence(encodedECDHPrivateKey, Arrays.reverse(rawPrivateKey)));

byte[] decodedECDHPrivateKey = jcaNativePrivateKey(c.getPrivateKey(pgpECDHKeyPair.getPrivateKey()));
isEncodingEqual(decodedECDHPrivateKey, rawPrivateKey);
isEncodingEqual("Decoded ECDH Curve25519Legacy (X25519) key MUST match original raw key (JCE implementation)",
decodedECDHPrivateKey, rawPrivateKey);

// X25519 key uses native encoding
PGPKeyPair pgpX25519KeyPair = new JcaPGPKeyPair(PublicKeyAlgorithmTags.X25519, kp, date);
byte[] encodedX25519PrivateKey = pgpX25519KeyPair.getPrivateKey().getPrivateKeyDataPacket().getEncoded();
isTrue(containsSubsequence(encodedX25519PrivateKey, rawPrivateKey));
isTrue("X25519 key MUST use native encoding (little-endian) to encode the secret key material (JCE implementation)",
containsSubsequence(encodedX25519PrivateKey, rawPrivateKey));

byte[] decodedX25519PrivateKey = jcaNativePrivateKey(c.getPrivateKey(pgpX25519KeyPair.getPrivateKey()));
isEncodingEqual(rawPrivateKey, decodedX25519PrivateKey);
isEncodingEqual("Decoded X25519 key MUST match original raw key (JCE implementation)",
rawPrivateKey, decodedX25519PrivateKey);
}

/**
Expand Down Expand Up @@ -122,18 +126,22 @@ private void bc_verifySecretKeyReverseEncoding()
// Legacy key uses reversed encoding
PGPKeyPair pgpECDHKeyPair = new BcPGPKeyPair(PublicKeyAlgorithmTags.ECDH, kp, date);
byte[] encodedECDHPrivateKey = pgpECDHKeyPair.getPrivateKey().getPrivateKeyDataPacket().getEncoded();
isTrue(containsSubsequence(encodedECDHPrivateKey, Arrays.reverse(rawPrivateKey)));
isTrue("ECDH Curve25519Legacy (X25519) key MUST encode secret key in 'reverse' (big-endian MPI encoding) (BC implementation)",
containsSubsequence(encodedECDHPrivateKey, Arrays.reverse(rawPrivateKey)));

byte[] decodedECDHPrivateKey = ((X25519PrivateKeyParameters) c.getPrivateKey(pgpECDHKeyPair.getPrivateKey())).getEncoded();
isEncodingEqual(decodedECDHPrivateKey, rawPrivateKey);
isEncodingEqual("Decoded ECDH Curve25519Legacy (X25519) key MUST match original raw key (BC implementation)",
decodedECDHPrivateKey, rawPrivateKey);

// X25519 key uses native encoding
PGPKeyPair pgpX25519KeyPair = new BcPGPKeyPair(PublicKeyAlgorithmTags.X25519, kp, date);
byte[] encodedX25519PrivateKey = pgpX25519KeyPair.getPrivateKey().getPrivateKeyDataPacket().getEncoded();
isTrue(containsSubsequence(encodedX25519PrivateKey, rawPrivateKey));
isTrue("X25519 key MUST use native encoding (little-endian) to encode the secret key material (BC implementation)",
containsSubsequence(encodedX25519PrivateKey, rawPrivateKey));

byte[] decodedX25519PrivateKey = ((X25519PrivateKeyParameters) c.getPrivateKey(pgpX25519KeyPair.getPrivateKey())).getEncoded();
isEncodingEqual(rawPrivateKey, decodedX25519PrivateKey);
isEncodingEqual("Decoded X25519 key MUST match original raw key (BC implementation)",
rawPrivateKey, decodedX25519PrivateKey);
}

/**
Expand Down

0 comments on commit 53f22c2

Please sign in to comment.