Skip to content

Commit 032d5f1

Browse files
author
Rijul Gulati
committed
Added comments and minor fixes
1 parent 691705a commit 032d5f1

File tree

3 files changed

+32
-30
lines changed

3 files changed

+32
-30
lines changed

andotp/andotp.go

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// Package andotp implements functions to encrypt/decrypt andOTP files.
12
package andotp
23

34
import (
@@ -6,51 +7,52 @@ import (
67
"crypto/sha1"
78
"encoding/binary"
89
"fmt"
9-
"io/ioutil"
1010
"math/rand"
1111

1212
"golang.org/x/crypto/pbkdf2"
1313
)
1414

1515
const (
16-
IV_LEN int = 12
17-
KEY_LEN int = 32
18-
ITERATION_LEN int = 4
19-
SALT_LEN int = 12
20-
MAX_ITERATIONS int = 160000
21-
MIN_ITERATIONS int = 140000
16+
ivLen int = 12
17+
keyLen int = 32
18+
iterationLen int = 4
19+
saltLen int = 12
20+
maxIterations int = 160000
21+
minIterations int = 140000
2222
)
2323

24+
// Encrypt encrypts plaintext with password according to andotp encryption standard.
25+
// It returns encrypted byte array and any error encountered.
2426
func Encrypt(plaintext []byte, password string) ([]byte, error) {
2527

2628
var finalCipher []byte
27-
iter := make([]byte, ITERATION_LEN)
28-
iv := make([]byte, IV_LEN)
29-
salt := make([]byte, SALT_LEN)
29+
iter := make([]byte, iterationLen)
30+
iv := make([]byte, ivLen)
31+
salt := make([]byte, saltLen)
3032

31-
iterations := rand.Intn(MAX_ITERATIONS-MIN_ITERATIONS) + MIN_ITERATIONS
33+
iterations := rand.Intn(maxIterations-minIterations) + minIterations
3234
binary.BigEndian.PutUint32(iter, uint32(iterations))
3335

3436
_, err := rand.Read(iv)
3537
if err != nil {
36-
return nil, FormatError(err.Error())
38+
return nil, formatError(err.Error())
3739
}
3840

3941
_, err = rand.Read(salt)
4042
if err != nil {
41-
return nil, FormatError(err.Error())
43+
return nil, formatError(err.Error())
4244
}
4345

44-
secretKey := pbkdf2.Key([]byte(password), salt, iterations, KEY_LEN, sha1.New)
46+
secretKey := pbkdf2.Key([]byte(password), salt, iterations, keyLen, sha1.New)
4547

4648
block, err := aes.NewCipher(secretKey)
4749
if err != nil {
48-
return nil, FormatError(err.Error())
50+
return nil, formatError(err.Error())
4951
}
5052

5153
aesgcm, err := cipher.NewGCM(block)
5254
if err != nil {
53-
return nil, FormatError(err.Error())
55+
return nil, formatError(err.Error())
5456
}
5557

5658
cipherText := aesgcm.Seal(nil, iv, plaintext, nil)
@@ -64,37 +66,35 @@ func Encrypt(plaintext []byte, password string) ([]byte, error) {
6466

6567
}
6668

69+
// Decrypt decrypts encryptedtext using password.
70+
// It returns decrypted byte array and any error encountered.
6771
func Decrypt(encryptedtext []byte, password string) ([]byte, error) {
6872

69-
iterations := encryptedtext[:ITERATION_LEN]
70-
salt := encryptedtext[ITERATION_LEN : ITERATION_LEN+SALT_LEN]
71-
iv := encryptedtext[ITERATION_LEN+SALT_LEN : ITERATION_LEN+SALT_LEN+IV_LEN]
72-
cipherText := encryptedtext[ITERATION_LEN+SALT_LEN+IV_LEN:]
73+
iterations := encryptedtext[:iterationLen]
74+
salt := encryptedtext[iterationLen : iterationLen+saltLen]
75+
iv := encryptedtext[iterationLen+saltLen : iterationLen+saltLen+ivLen]
76+
cipherText := encryptedtext[iterationLen+saltLen+ivLen:]
7377
iter := int(binary.BigEndian.Uint32(iterations))
74-
secretKey := pbkdf2.Key([]byte(password), salt, iter, KEY_LEN, sha1.New)
78+
secretKey := pbkdf2.Key([]byte(password), salt, iter, keyLen, sha1.New)
7579

7680
block, err := aes.NewCipher(secretKey)
7781
if err != nil {
78-
return nil, FormatError(err.Error())
82+
return nil, formatError(err.Error())
7983
}
8084

8185
aesgcm, err := cipher.NewGCM(block)
8286
if err != nil {
83-
return nil, FormatError(err.Error())
87+
return nil, formatError(err.Error())
8488
}
8589

8690
plaintextbytes, err := aesgcm.Open(nil, iv, cipherText, nil)
8791
if err != nil {
88-
return nil, FormatError(err.Error())
92+
return nil, formatError(err.Error())
8993
}
9094

9195
return plaintextbytes, nil
9296
}
9397

94-
func FormatError(e string) error {
98+
func formatError(e string) error {
9599
return fmt.Errorf("error: %s", e)
96100
}
97-
98-
func ReadFile(file string) ([]byte, error) {
99-
return ioutil.ReadFile(file)
100-
}

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ go 1.16
44

55
require (
66
golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf
7+
golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b // indirect
78
golang.org/x/term v0.0.0-20210503060354-a79de5458b56
89
)

go.sum

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o=
22
golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
33
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
4-
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
54
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
5+
golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b h1:qh4f65QIVFjq9eBURLEYWqaEXmOyqdUyiBSgaXWccWk=
6+
golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
67
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
78
golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w=
89
golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=

0 commit comments

Comments
 (0)