ECDSAAlgorithmTest.java 文件源码

java
阅读 28 收藏 0 点赞 0 评论 0

项目:java-jwt 作者:
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));
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号