static void assertValidJOSESignature(byte[] joseSignature, int numberSize, boolean withRPadding, boolean withSPadding) { Assert.assertThat(joseSignature, is(Matchers.notNullValue())); Assert.assertThat(numberSize, is(IsIn.oneOf(32, 48, 66))); Assert.assertThat(joseSignature.length, is(numberSize * 2)); byte[] rCopy = Arrays.copyOfRange(joseSignature, 0, numberSize); byte[] sCopy = Arrays.copyOfRange(joseSignature, numberSize, numberSize * 2); byte[] rNumber = new byte[numberSize]; byte[] sNumber = new byte[numberSize]; Arrays.fill(rNumber, (byte) 0x11); Arrays.fill(sNumber, (byte) 0x22); if (withRPadding) { rNumber[0] = (byte) 0; } if (withSPadding) { sNumber[0] = (byte) 0; } Assert.assertThat(Arrays.equals(rNumber, rCopy), is(true)); Assert.assertThat(Arrays.equals(sNumber, sCopy), is(true)); }
static byte[] createJOSESignature(int numberSize, boolean withRPadding, boolean withSPadding) { Assert.assertThat(numberSize, is(IsIn.oneOf(32, 48, 66))); byte[] rNumber = new byte[numberSize]; byte[] sNumber = new byte[numberSize]; Arrays.fill(rNumber, (byte) 0x11); Arrays.fill(sNumber, (byte) 0x22); if (withRPadding) { rNumber[0] = (byte) 0; } if (withSPadding) { sNumber[0] = (byte) 0; } byte[] joseSignature = new byte[numberSize * 2]; System.arraycopy(rNumber, 0, joseSignature, 0, numberSize); System.arraycopy(sNumber, 0, joseSignature, numberSize, numberSize); return joseSignature; }
@Test public void testToRequest(){ MultivaluedMap<String, String> expected = new MultivaluedMapImpl(); expected.add("amount", "350"); expected.add("currency", "USD"); expected.add("metadata[foo]", "28"); expected.add("metadata[isMeta]", "true"); CreateChargeRequest chargeRequest = new CreateChargeRequest(350, "USD"); Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put("foo", 28); metadata.put("isMeta", true); chargeRequest.setMetadata(metadata); MultivaluedMap<String, String> request = chargeRequest.toRequest(); MatcherAssert.assertThat(request.entrySet(), Every.everyItem(IsIn.isIn(expected.entrySet()))); MatcherAssert.assertThat(expected.entrySet(), Every.everyItem(IsIn.isIn(request.entrySet()))); }
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)); }
private void verifyTrimmedRDotJava(ImmutableSet<String> expected) throws IOException { List<String> lines = filesystem.readLines( Paths.get("buck-out/gen/apps/multidex/disassemble_app_r_dot_java/all_r_fields.smali")); ImmutableSet.Builder<String> found = ImmutableSet.builder(); for (String line : lines) { Matcher m = SMALI_STATIC_FINAL_INT_PATTERN.matcher(line); assertTrue("Could not match line: " + line, m.matches()); assertThat(m.group(1), IsIn.in(expected)); found.add(m.group(1)); } assertEquals(expected, found.build()); }
static byte[] createDERSignature(int numberSize, boolean withRPadding, boolean withSPadding) { 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); byte[] rNumber = new byte[rLength]; byte[] sNumber = new byte[sLength]; Arrays.fill(rNumber, (byte) 0x11); Arrays.fill(sNumber, (byte) 0x22); byte[] derSignature; int offset = 0; if (totalLength > 0x7f) { totalLength++; derSignature = new byte[totalLength]; //Start sequence and sign derSignature[offset++] = (byte) 0x30; derSignature[offset++] = (byte) 0x81; } else { derSignature = new byte[totalLength]; //Start sequence derSignature[offset++] = (byte) 0x30; } //Sequence length derSignature[offset++] = (byte) (totalLength - offset); //R number derSignature[offset++] = (byte) 0x02; derSignature[offset++] = (byte) rLength; System.arraycopy(rNumber, 0, derSignature, offset, rLength); offset += rLength; //S number derSignature[offset++] = (byte) 0x02; derSignature[offset++] = (byte) sLength; System.arraycopy(sNumber, 0, derSignature, offset, sLength); return derSignature; }