static void assertValidDERSignature(byte[] derSignature, int numberSize, boolean withRPadding, boolean withSPadding) {
Assert.assertThat(derSignature, is(Matchers.notNullValue()));
Assert.assertThat(numberSize, is(IsIn.oneOf(32, 48, 66)));
int rLength = withRPadding ? numberSize - 1 : numberSize;
int sLength = withSPadding ? numberSize - 1 : numberSize;
int totalLength = 2 + (2 + rLength) + (2 + sLength);
int offset = 0;
//Start sequence
Assert.assertThat(derSignature[offset++], is((byte) 0x30));
if (totalLength > 0x7f) {
//Add sign before sequence length
totalLength++;
Assert.assertThat(derSignature[offset++], is((byte) 0x81));
}
//Sequence length
Assert.assertThat(derSignature[offset++], is((byte) (totalLength - offset)));
//R number
Assert.assertThat(derSignature[offset++], is((byte) 0x02));
Assert.assertThat(derSignature[offset++], is((byte) rLength));
byte[] rCopy = Arrays.copyOfRange(derSignature, offset, offset + rLength);
offset += rLength;
//S number
Assert.assertThat(derSignature[offset++], is((byte) 0x02));
Assert.assertThat(derSignature[offset++], is((byte) sLength));
byte[] sCopy = Arrays.copyOfRange(derSignature, offset, offset + sLength);
byte[] rNumber = new byte[rLength];
byte[] sNumber = new byte[sLength];
Arrays.fill(rNumber, (byte) 0x11);
Arrays.fill(sNumber, (byte) 0x22);
Assert.assertThat(Arrays.equals(rNumber, rCopy), is(true));
Assert.assertThat(Arrays.equals(sNumber, sCopy), is(true));
Assert.assertThat(derSignature.length, is(totalLength));
}
ECDSAAlgorithmTest.java 文件源码
java
阅读 28
收藏 0
点赞 0
评论 0
项目:java-jwt
作者:
评论列表
文章目录