/** * Validate signature. * * @param content Body of the http request in byte array. * @param headerSignature Signature value from `X-LINE-Signature` HTTP header * * @return True if headerSignature matches signature of the content. False otherwise. */ public boolean validateSignature(@NonNull byte[] content, @NonNull String headerSignature) { final byte[] signature = generateSignature(content); final byte[] decodeHeaderSignature = Base64.getDecoder().decode(headerSignature); return MessageDigest.isEqual(decodeHeaderSignature, signature); }
@Test public void generateSignature() throws Exception { LineSignatureValidator lineSignatureValidator = new LineSignatureValidator( channelSecret.getBytes(StandardCharsets.UTF_8)); String httpRequestBody = "{}"; byte[] headerSignature = lineSignatureValidator .generateSignature(httpRequestBody.getBytes(StandardCharsets.UTF_8)); assertThat(Base64Utils.encodeToString(headerSignature)) .isEqualTo("3q8QXTAGaey18yL8FWTqdVlbMr6hcuNvM4tefa0o9nA="); }