Skip to content

Commit bfb80ae

Browse files
committed
SM2 user ID length checks
1 parent 86e904a commit bfb80ae

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

core/src/main/java/org/bouncycastle/crypto/agreement/SM2KeyExchange.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ public void init(
5353
{
5454
baseParam = (SM2KeyExchangePrivateParameters)((ParametersWithID)privParam).getParameters();
5555
userID = ((ParametersWithID)privParam).getID();
56+
57+
if (userID.length >= 8192)
58+
{
59+
// The length in bits must be expressible in two bytes
60+
throw new IllegalArgumentException("SM2 user ID must be less than 2^16 bits long");
61+
}
5662
}
5763
else
5864
{
@@ -276,6 +282,7 @@ private byte[] getZ(Digest digest, byte[] userID, ECPoint pubPoint)
276282
private void addUserID(Digest digest, byte[] userID)
277283
{
278284
int len = userID.length * 8;
285+
// assert len >>> 16 == 0;
279286

280287
digest.update((byte)(len >>> 8));
281288
digest.update((byte)len);

core/src/main/java/org/bouncycastle/crypto/signers/SM2Signer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ public void init(boolean forSigning, CipherParameters param)
8181

8282
if (userID.length >= 8192)
8383
{
84-
throw new IllegalArgumentException("SM2 user ID must be less than 2^13 bits long");
84+
// The length in bits must be expressible in two bytes
85+
throw new IllegalArgumentException("SM2 user ID must be less than 2^16 bits long");
8586
}
8687
}
8788
else
@@ -323,6 +324,8 @@ private byte[] getZ(byte[] userID)
323324
private void addUserID(Digest digest, byte[] userID)
324325
{
325326
int len = userID.length * 8;
327+
// assert len >>> 16 == 0;
328+
326329
digest.update((byte)(len >>> 8));
327330
digest.update((byte)len);
328331
digest.update(userID, 0, userID.length);

0 commit comments

Comments
 (0)