-
Notifications
You must be signed in to change notification settings - Fork 56
/
PublicKey.scala
44 lines (40 loc) · 1.57 KB
/
PublicKey.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.jsuereth.pgp
import java.io._
import org.bouncycastle.bcpg._
import org.bouncycastle.openpgp._
/** This class represents a public PGP key. It can be used to encrypt messages for a person and validate that messages were signed correctly. */
class PublicKey(val nested: PGPPublicKey) extends PublicKeyLike with StreamingSaveable {
/** The identifier for this key. */
def keyID = nested.getKeyID
def bitStrength = nested.getBitStrength
def creationTime = nested.getCreationTime
def fingerprint = nested.getFingerprint
def isRevoked = nested.isRevoked
/** Returns the userIDs associated with this public key. */
def userIDs = new Traversable[String] {
def foreach[U](f: String => U) = {
val i = nested.getUserIDs
while(i.hasNext) f(i.next.toString)
}
}
def verifyMessageStream(input: InputStream, output: OutputStream): Boolean =
verifyMessageStreamHelper(input,output) { id =>
assert(id == keyID)
nested
}
def verifySignatureStreams(msg: InputStream, signature: InputStream): Boolean =
verifySignatureStreamsHelper(msg,signature) { id =>
if(keyID != id) error("Signature is not for this key. %x != %x".format(id, keyID))
nested
}
def saveTo(output: OutputStream): Unit = {
val armoredOut = new ArmoredOutputStream(output)
nested.encode(armoredOut)
armoredOut.close()
}
override lazy val toString = "PublicKey(%x, %s)".format(keyID, userIDs.mkString(","))
}
object PublicKey {
def apply(nested: PGPPublicKey) = new PublicKey(nested)
implicit def unwrap(key: PublicKey) = key.nested
}