aboutsummaryrefslogtreecommitdiff
path: root/key/enc.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-07-20 00:49:51 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-07-20 00:49:51 +0200
commitf6c49d3e907ce2ea1e1bfdebcc8e6d0160aecaa0 (patch)
treef60c6e4181a2ef8ba039546857468640323b011d /key/enc.go
parent7d81c334c35b33f853edd7a7909e749ef277ae38 (diff)
Rename Enc to Sec
Diffstat (limited to 'key/enc.go')
-rw-r--r--key/enc.go68
1 files changed, 0 insertions, 68 deletions
diff --git a/key/enc.go b/key/enc.go
deleted file mode 100644
index aa65df3..0000000
--- a/key/enc.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package key
-
-import (
- "bytes"
- "crypto/sha512"
-
- "golang.org/x/crypto/ed25519"
-)
-
-type Enc struct {
- PKAlg [2]byte
- KDFAlg [2]byte
- KDFRounds uint32
- Salt [16]byte
- Checksum [8]byte
- KeyNum [8]byte
- Key [ed25519.PrivateKeySize]byte
-}
-
-// Sign message
-func (v *Enc) Sign(message []byte) *Sig {
- sig := &Sig{PKAlg: v.PKAlg, KeyNum: v.KeyNum}
- copy(sig.Sig[:], ed25519.Sign(ed25519.PrivateKey(v.Key[:]), message))
- return sig
-}
-
-func (v *Enc) Validate() error {
- if v.PKAlg != pkAlg {
- return ErrInvalidPK
- }
- if v.KDFAlg != kdfAlg {
- return ErrInvalidKDF
- }
- sum := sha512.Sum512(v.Key[:])
- if !bytes.Equal(sum[:len(v.Checksum)], v.Checksum[:]) {
- return ErrInvalidKey
- }
- return nil
-}
-
-func (v *Enc) MarshalBinary() ([]byte, error) { return marshal(v) }
-func (v *Enc) UnmarshalBinary(data []byte) error { return unmarshal(data, v) }
-
-// Public key of encryption key
-func (v *Enc) Public() *Pub {
- key := ed25519.PrivateKey(v.Key[:]).Public().(ed25519.PublicKey)
- pub := &Pub{PKAlg: pkAlg, KeyNum: v.KeyNum}
- copy(pub.Key[:], key)
- return pub
-}
-
-// NewEnc returns a parsed and decoded encryption key
-func NewEnc(data []byte, der Deriver) (*Enc, error) {
- enc := new(Enc)
- if err := enc.UnmarshalBinary(data); err != nil {
- return nil, err
- }
- if der != nil && enc.KDFRounds > 0 {
- xor, err := der.Derive(enc.Salt[:], int(enc.KDFRounds), len(enc.Key))
- if err != nil {
- return nil, err
- }
- for i := range xor {
- enc.Key[i] ^= xor[i]
- }
- }
- return enc, enc.Validate()
-}