Skip to content

Instantly share code, notes, and snippets.

@taretmch
Created May 31, 2020 10:57
Show Gist options
  • Save taretmch/a568675e49ab6b3eb315d164eea09b80 to your computer and use it in GitHub Desktop.
Save taretmch/a568675e49ab6b3eb315d164eea09b80 to your computer and use it in GitHub Desktop.
import org.keyczar._
import org.keyczar.enums._
import org.apache.commons.codec.binary.{Hex, StringUtils}
import org.apache.commons.codec.digest.DigestUtils
import ixias.security.KeyReader
object SignerSample {
def main(args: Array[String]): Unit = {
// 秘密鍵の設定
val secret = "secret-key"
// 鍵の生成
val secretDigest = DigestUtils.sha256(secret)
// HMAC 用鍵オブジェクトの生成
val key = new HmacKey(secretDigest)
// 鍵のメタデータの生成
val keyMetadata = new KeyMetadata(
"HMAC test",
KeyPurpose.SIGN_AND_VERIFY,
DefaultKeyType.HMAC_SHA1
)
// 鍵のバージョンの生成
val keyVersion = new KeyVersion(0, KeyStatus.PRIMARY, false)
// 鍵のバージョンのメタデータへの追加
keyMetadata.addVersion(keyVersion)
// 鍵の読み出しオブジェクトの生成
// KeyReader は KeyczarReader を継承している
// KeyczarReader はインタフェースであるため、自前で実装する必要がある
val reader = new KeyReader(keyMetadata, IndexedSeq(key))
// 秘密鍵の設定から Signer を生成する
val signer = new Signer(reader)
// 署名するメッセージ
val message = "This is a pen."
// 秘密鍵を用いて生成した署名
val signature = signer.sign(StringUtils.getBytesUsAscii(message))
println("message: " + message)
println("signature: " + signature)
// メッセージの検証
// => true が返される
val result = signer.verify(StringUtils.getBytesUsAscii(message), signature)
println("verification: " + result)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment