cleaning
This commit is contained in:
parent
d9a5f65e09
commit
3dab9a5c1f
22
README.md
22
README.md
@ -4,15 +4,15 @@ This is a partial implementation of S/MIME 4.0 in golang.
|
|||||||
|
|
||||||
It consists of the following packages
|
It consists of the following packages
|
||||||
|
|
||||||
- asn1<sup>[1]</sup> - ASN.1 marshalling and unmarshalling [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/asn1?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/asn1)
|
- asn1<sup>[1]</sup> - ASN.1 marshalling and unmarshalling
|
||||||
- b64 - Pretty base64 encoding for S/MIME (basically just the PEM body) [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/b64?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/b64)
|
- b64 - Pretty base64 encoding for S/MIME (basically just the PEM body)
|
||||||
- cms(cms/protocol)<sup>[2]</sup> - Cryptographic Message Syntax [rfc5652](https://tools.ietf.org/html/rfc5652)[![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/cms?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/cms) [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/cms/protocol?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/cms/protocol)
|
- cms(cms/protocol)<sup>[2]</sup> - Cryptographic Message Syntax [rfc5652](https://tools.ietf.org/html/rfc5652)
|
||||||
- mime - Parsing for mime/multipart messages needed for S/MIME [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/mime?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/mime)
|
- mime - Parsing for mime/multipart messages needed for S/MIME
|
||||||
- oid<sup>[3]</sup> - ASN.1 object identifiers and related crypto [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/oid?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/oid)
|
- oid<sup>[3]</sup> - ASN.1 object identifiers and related crypto
|
||||||
- openssl - Shelled-out openssl for testing [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/openssl?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/openssl)
|
- openssl - Shelled-out openssl for testing
|
||||||
- pki<sup>[4]</sup> - Creates x.509 pki for testing [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/pki?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/pki)
|
- pki<sup>[4]</sup> - Creates x.509 pki for testing
|
||||||
- smime Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 [rfc5751-bis-12](https://tools.ietf.org/html/draft-ietf-lamps-rfc5751-bis-12) [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/smime?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/smime)
|
- smime Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 [rfc5751-bis-12](https://tools.ietf.org/html/draft-ietf-lamps-rfc5751-bis-12)
|
||||||
- timestamp<sup>[5]</sup> - Time-Stamp Protocol (TSP) [rfc3161](https://tools.ietf.org/html/rfc3161) [![GoDoc](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/timestamp?status.svg)](https://godoc.org/github.com/InfiniteLoopSpace/go_S-MIME/timestamp)
|
- timestamp<sup>[5]</sup> - Time-Stamp Protocol (TSP) [rfc3161](https://tools.ietf.org/html/rfc3161)
|
||||||
|
|
||||||
It supports enveloped data with AES in CBC mode. Decryption also works with (3)DES. Authenticated-Enveloped-Data Content Type is also supported with AES-GCM and ChaCha20-Poly1305. Also RSAES-OAEP and RSASSA-PSS is supported.
|
It supports enveloped data with AES in CBC mode. Decryption also works with (3)DES. Authenticated-Enveloped-Data Content Type is also supported with AES-GCM and ChaCha20-Poly1305. Also RSAES-OAEP and RSASSA-PSS is supported.
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ This is covered in
|
|||||||
|
|
||||||
### Encryption and decryption
|
### Encryption and decryption
|
||||||
```go
|
```go
|
||||||
import "github.com/InfiniteLoopSpace/go_S-MIME/smime"
|
import "git.ma-al.com/goc_marek/go_S-MIME/smime"
|
||||||
|
|
||||||
// Alice
|
// Alice
|
||||||
mail := "From: Alice\nTo: Bob\n\nHello World!"
|
mail := "From: Alice\nTo: Bob\n\nHello World!"
|
||||||
@ -41,7 +41,7 @@ plaintext, _ := SMIME.Decrypt(ciphertext)
|
|||||||
|
|
||||||
### Signing and verfication
|
### Signing and verfication
|
||||||
```go
|
```go
|
||||||
import "github.com/InfiniteLoopSpace/go_S-MIME/smime"
|
import "git.ma-al.com/goc_marek/go_S-MIME/smime"
|
||||||
|
|
||||||
// Alice
|
// Alice
|
||||||
AlicekeyPair, _ := tls.LoadX509KeyPair("AliceCert", "AliceKey")
|
AlicekeyPair, _ := tls.LoadX509KeyPair("AliceCert", "AliceKey")
|
||||||
|
@ -9,9 +9,9 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
protocol "github.com/InfiniteLoopSpace/go_S-MIME/cms/protocol"
|
protocol "git.ma-al.com/goc_marek/go_S-MIME/cms/protocol"
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
timestamp "github.com/InfiniteLoopSpace/go_S-MIME/timestamp"
|
timestamp "git.ma-al.com/goc_marek/go_S-MIME/timestamp"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CMS is an instance of cms to en-/decrypt and sign/verfiy CMS data
|
// CMS is an instance of cms to en-/decrypt and sign/verfiy CMS data
|
||||||
|
@ -12,8 +12,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
openssl "github.com/InfiniteLoopSpace/go_S-MIME/openssl"
|
openssl "git.ma-al.com/goc_marek/go_S-MIME/openssl"
|
||||||
pki "github.com/InfiniteLoopSpace/go_S-MIME/pki"
|
pki "git.ma-al.com/goc_marek/go_S-MIME/pki"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -3,7 +3,7 @@ package protocol
|
|||||||
import (
|
import (
|
||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
|
|
||||||
asn "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RawValue marshals val and returns the asn1.RawValue
|
// RawValue marshals val and returns the asn1.RawValue
|
||||||
|
@ -5,8 +5,8 @@ import (
|
|||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
asn "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AuthEnvelopedData ::= SEQUENCE {
|
// AuthEnvelopedData ::= SEQUENCE {
|
||||||
@ -14,9 +14,12 @@ import (
|
|||||||
// originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
|
// originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
|
||||||
// recipientInfos RecipientInfos,
|
// recipientInfos RecipientInfos,
|
||||||
// authEncryptedContentInfo EncryptedContentInfo,
|
// authEncryptedContentInfo EncryptedContentInfo,
|
||||||
|
//
|
||||||
// / authAttrs [1] IMPLICIT AuthAttributes OPTIONAL,
|
// / authAttrs [1] IMPLICIT AuthAttributes OPTIONAL,
|
||||||
|
//
|
||||||
// mac MessageAuthenticationCode,
|
// mac MessageAuthenticationCode,
|
||||||
// unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL }
|
// unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL }
|
||||||
|
//
|
||||||
// https://tools.ietf.org/html/rfc5083##section-2.1
|
// https://tools.ietf.org/html/rfc5083##section-2.1
|
||||||
type AuthEnvelopedData struct {
|
type AuthEnvelopedData struct {
|
||||||
Version int
|
Version int
|
||||||
|
@ -7,8 +7,8 @@ import (
|
|||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
asn "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
"github.com/InfiniteLoopSpace/go_S-MIME/b64"
|
"git.ma-al.com/goc_marek/go_S-MIME/b64"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContentInfo ::= SEQUENCE {
|
// ContentInfo ::= SEQUENCE {
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
"github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
"git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
var errUnsupported = errors.New("Unsupported hash function")
|
var errUnsupported = errors.New("Unsupported hash function")
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"crypto/x509/pkix"
|
"crypto/x509/pkix"
|
||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
|
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// EncryptedContentInfo ::= SEQUENCE {
|
// EncryptedContentInfo ::= SEQUENCE {
|
||||||
|
@ -3,7 +3,7 @@ package protocol
|
|||||||
import (
|
import (
|
||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
|
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// EncapsulatedContentInfo ::= SEQUENCE {
|
// EncapsulatedContentInfo ::= SEQUENCE {
|
||||||
|
@ -5,8 +5,8 @@ import (
|
|||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
asn "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// EnvelopedData ::= SEQUENCE {
|
// EnvelopedData ::= SEQUENCE {
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
type pssParameters struct {
|
type pssParameters struct {
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RecipientInfo ::= CHOICE {
|
// RecipientInfo ::= CHOICE {
|
||||||
|
@ -17,8 +17,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
asn "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SignedDataContent returns SignedData if ContentType is SignedData.
|
// SignedDataContent returns SignedData if ContentType is SignedData.
|
||||||
|
@ -9,8 +9,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
asn "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SignerInfo ::= SEQUENCE {
|
// SignerInfo ::= SEQUENCE {
|
||||||
|
@ -13,12 +13,12 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
"git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
|
|
||||||
"github.com/InfiniteLoopSpace/go_S-MIME/b64"
|
"git.ma-al.com/goc_marek/go_S-MIME/b64"
|
||||||
|
|
||||||
cms "github.com/InfiniteLoopSpace/go_S-MIME/cms"
|
cms "git.ma-al.com/goc_marek/go_S-MIME/cms"
|
||||||
mime "github.com/InfiniteLoopSpace/go_S-MIME/mime"
|
mime "git.ma-al.com/goc_marek/go_S-MIME/mime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SMIME is an instance of cms to en-/decrypt and sign/verfiy SMIME messages
|
// SMIME is an instance of cms to en-/decrypt and sign/verfiy SMIME messages
|
||||||
|
@ -11,9 +11,9 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/InfiniteLoopSpace/go_S-MIME/cms"
|
"git.ma-al.com/goc_marek/go_S-MIME/cms"
|
||||||
"github.com/InfiniteLoopSpace/go_S-MIME/openssl"
|
"git.ma-al.com/goc_marek/go_S-MIME/openssl"
|
||||||
"github.com/InfiniteLoopSpace/go_S-MIME/pki"
|
"git.ma-al.com/goc_marek/go_S-MIME/pki"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -6,9 +6,9 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
asn "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
cms "github.com/InfiniteLoopSpace/go_S-MIME/cms/protocol"
|
cms "git.ma-al.com/goc_marek/go_S-MIME/cms/protocol"
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TSTInfo ::= SEQUENCE {
|
// TSTInfo ::= SEQUENCE {
|
||||||
|
@ -5,7 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
cms "github.com/InfiniteLoopSpace/go_S-MIME/cms/protocol"
|
cms "git.ma-al.com/goc_marek/go_S-MIME/cms/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PKIStatusInfo ::= SEQUENCE {
|
// PKIStatusInfo ::= SEQUENCE {
|
||||||
|
@ -12,8 +12,8 @@ import (
|
|||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
cms "github.com/InfiniteLoopSpace/go_S-MIME/cms/protocol"
|
cms "git.ma-al.com/goc_marek/go_S-MIME/cms/protocol"
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TimeStampReq ::= SEQUENCE {
|
// TimeStampReq ::= SEQUENCE {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package timestamp
|
package timestamp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
asn "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
cms "github.com/InfiniteLoopSpace/go_S-MIME/cms/protocol"
|
cms "git.ma-al.com/goc_marek/go_S-MIME/cms/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TimeStampResp ::= SEQUENCE {
|
// TimeStampResp ::= SEQUENCE {
|
||||||
|
@ -6,9 +6,9 @@ import (
|
|||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
asn1 "github.com/InfiniteLoopSpace/go_S-MIME/asn1"
|
asn1 "git.ma-al.com/goc_marek/go_S-MIME/asn1"
|
||||||
cms "github.com/InfiniteLoopSpace/go_S-MIME/cms/protocol"
|
cms "git.ma-al.com/goc_marek/go_S-MIME/cms/protocol"
|
||||||
oid "github.com/InfiniteLoopSpace/go_S-MIME/oid"
|
oid "git.ma-al.com/goc_marek/go_S-MIME/oid"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
Loading…
Reference in New Issue
Block a user