...

Source file src/github.com/ProtonMail/go-crypto/openpgp/armor/armor_test.go

Documentation: github.com/ProtonMail/go-crypto/openpgp/armor

     1  // Copyright 2010 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package armor
     6  
     7  import (
     8  	"bytes"
     9  	"hash/adler32"
    10  	"io/ioutil"
    11  	"testing"
    12  )
    13  
    14  func TestDecodeEncode(t *testing.T) {
    15  	buf := bytes.NewBuffer([]byte(armorExample1))
    16  	result, err := Decode(buf)
    17  	if err != nil {
    18  		t.Error(err)
    19  	}
    20  	expectedType := "PGP SIGNATURE"
    21  	if result.Type != expectedType {
    22  		t.Errorf("result.Type: got:%s want:%s", result.Type, expectedType)
    23  	}
    24  	if len(result.Header) != 1 {
    25  		t.Errorf("len(result.Header): got:%d want:1", len(result.Header))
    26  	}
    27  	v, ok := result.Header["Version"]
    28  	if !ok || v != "GnuPG v1.4.10 (GNU/Linux)" {
    29  		t.Errorf("result.Header: got:%#v", result.Header)
    30  	}
    31  
    32  	contents, err := ioutil.ReadAll(result.Body)
    33  	if err != nil {
    34  		t.Error(err)
    35  	}
    36  
    37  	if adler32.Checksum(contents) != 0x27b144be {
    38  		t.Errorf("contents: got: %x", contents)
    39  	}
    40  
    41  	buf = bytes.NewBuffer(nil)
    42  	w, err := Encode(buf, result.Type, result.Header)
    43  	if err != nil {
    44  		t.Error(err)
    45  	}
    46  	_, err = w.Write(contents)
    47  	if err != nil {
    48  		t.Error(err)
    49  	}
    50  	w.Close()
    51  
    52  	if !bytes.Equal(buf.Bytes(), []byte(armorExample1)) {
    53  		t.Errorf("got: %s\nwant: %s", buf.String(), armorExample1)
    54  	}
    55  }
    56  
    57  func TestDecodeEmptyVersion(t *testing.T) {
    58  	buf := bytes.NewBuffer([]byte(armorExampleEmptyVersion))
    59  	result, err := Decode(buf)
    60  	if err != nil {
    61  		t.Error(err)
    62  	}
    63  	expectedType := "PGP SIGNATURE"
    64  	if result.Type != expectedType {
    65  		t.Errorf("result.Type: got:%s want:%s", result.Type, expectedType)
    66  	}
    67  	if len(result.Header) != 1 {
    68  		t.Errorf("len(result.Header): got:%d want:1", len(result.Header))
    69  	}
    70  	v, ok := result.Header["Version"]
    71  	if !ok || v != "" {
    72  		t.Errorf("result.Header: got:%#v", result.Header)
    73  	}
    74  }
    75  
    76  func TestLongHeader(t *testing.T) {
    77  	buf := bytes.NewBuffer([]byte(armorLongLine))
    78  	result, err := Decode(buf)
    79  	if err != nil {
    80  		t.Error(err)
    81  		return
    82  	}
    83  	value, ok := result.Header["Version"]
    84  	if !ok {
    85  		t.Errorf("missing Version header")
    86  	}
    87  	if value != longValueExpected {
    88  		t.Errorf("got: %s want: %s", value, longValueExpected)
    89  	}
    90  }
    91  
    92  const armorExample1 = `-----BEGIN PGP SIGNATURE-----
    93  Version: GnuPG v1.4.10 (GNU/Linux)
    94  
    95  iJwEAAECAAYFAk1Fv/0ACgkQo01+GMIMMbsYTwQAiAw+QAaNfY6WBdplZ/uMAccm
    96  4g+81QPmTSGHnetSb6WBiY13kVzK4HQiZH8JSkmmroMLuGeJwsRTEL4wbjRyUKEt
    97  p1xwUZDECs234F1xiG5enc5SGlRtP7foLBz9lOsjx+LEcA4sTl5/2eZR9zyFZqWW
    98  TxRjs+fJCIFuo71xb1g=
    99  =/teI
   100  -----END PGP SIGNATURE-----`
   101  
   102  const armorLongLine = `-----BEGIN PGP SIGNATURE-----
   103  Version: 0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz
   104  
   105  iQEcBAABAgAGBQJMtFESAAoJEKsQXJGvOPsVj40H/1WW6jaMXv4BW+1ueDSMDwM8
   106  kx1fLOXbVM5/Kn5LStZNt1jWWnpxdz7eq3uiqeCQjmqUoRde3YbB2EMnnwRbAhpp
   107  cacnAvy9ZQ78OTxUdNW1mhX5bS6q1MTEJnl+DcyigD70HG/yNNQD7sOPMdYQw0TA
   108  byQBwmLwmTsuZsrYqB68QyLHI+DUugn+kX6Hd2WDB62DKa2suoIUIHQQCd/ofwB3
   109  WfCYInXQKKOSxu2YOg2Eb4kLNhSMc1i9uKUWAH+sdgJh7NBgdoE4MaNtBFkHXRvv
   110  okWuf3+xA9ksp1npSY/mDvgHijmjvtpRDe6iUeqfCn8N9u9CBg8geANgaG8+QA4=
   111  =wfQG
   112  -----END PGP SIGNATURE-----`
   113  
   114  const longValueExpected = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz"
   115  
   116  const armorExampleEmptyVersion = `-----BEGIN PGP SIGNATURE-----
   117  Version: 
   118  
   119  wsE7BAABCgBvBYJkbfmWCRD7/MgqAV5zMEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u
   120  cy5zZXF1b2lhLXBncC5vcmeMXzsJEgIm228SdxV22XgYny4adwqEgyIT9UL3F92C
   121  OhYhBNGmbhojsYLJmA94jPv8yCoBXnMwAAAj1AwAiSkJPxsEcyaoYWbxc657xPW1
   122  MlrbNhDBIWpKVrqQgyz7NdDZvvY0Ty+/h62HK5GQ5obAzVmQVwtUVG950TxCksg1
   123  F18mqticpxg1veZQdw7DBYTk0RJTpdVBRYJ5UOtHaSJUAnqGh7OQE6Lu74vfFhNv
   124  dDjpjgEc6TnJrEBOOR7+RVp7+0i4HhM3+JdfSOMMOEb6ixWEYLtfC2Zd/p0f7vP8
   125  tHiqllDXDbfBCXlFl5h2LAh39o/LE0vZvwf+C9i9PgRARawWIh+xeAJsVne8FZ12
   126  FD+hWZJdNUCv4iE1H7QDVv8nuPAz3WB/DQWNSfeGTZnN+ouB1cjPFscBuunO5Dss
   127  k3hXy+XB5mZW6iisjUnUBknJEa43AMX+zGSaGHljEgfTGLbgEK+deOhPqKEkhUKr
   128  /VlIVBXgfjQuoizme9S9juxXHdDHa+Y5Wb9rTUc1y9YPArRem51VI0OzbJ2cRnLH
   129  J0YF6lYvjcTVBtmQlYeOfZsz4EABEeBYe/rbDmJC
   130  =b+IB
   131  -----END PGP SIGNATURE-----`
   132  

View as plain text