Cryptosystem.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package types
  2. import (
  3. "github.com/jcmturner/asn1"
  4. "fmt"
  5. )
  6. // Reference: https://www.ietf.org/rfc/rfc4120.txt
  7. // Section: 5.2.9
  8. // Reference: https://www.ietf.org/rfc/rfc3961.txt
  9. type EncryptedData struct {
  10. EType int `asn1:"explicit,tag:0"`
  11. KVNO int `asn1:"explicit,optional,tag:1"`
  12. Cipher []byte `asn1:"explicit,tag:2"`
  13. }
  14. //AKA KeyBlock
  15. type EncryptionKey struct {
  16. KeyType int `asn1:"explicit,tag:0"`
  17. KeyValue []byte `asn1:"explicit,tag:1"`
  18. }
  19. type Checksum struct {
  20. CksumType int `asn1:"explicit,tag:0"`
  21. Checksum []byte `asn1:"explicit,tag:1"`
  22. }
  23. func (a *EncryptedData) Unmarshal(b []byte) error {
  24. _, err := asn1.Unmarshal(b, a)
  25. return err
  26. }
  27. func (a *EncryptedData) Marshal() ([]byte, error) {
  28. edb, err := asn1.Marshal(*a)
  29. if err != nil {
  30. return edb, fmt.Errorf("Error marshalling EncryptedData: %v", err)
  31. }
  32. return edb, nil
  33. }
  34. func (a *EncryptionKey) Unmarshal(b []byte) error {
  35. _, err := asn1.Unmarshal(b, a)
  36. return err
  37. }
  38. func (a *Checksum) Unmarshal(b []byte) error {
  39. _, err := asn1.Unmarshal(b, a)
  40. return err
  41. }