diff --git a/api/mnemonic_test.go b/api/mnemonic_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..b9f7715be1f4421575347147cc32720a4a9cc5cd
--- /dev/null
+++ b/api/mnemonic_test.go
@@ -0,0 +1,100 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright © 2020 xx network SEZC                                          //
+//                                                                           //
+// Use of this source code is governed by a license that can be found in the //
+// LICENSE file                                                              //
+///////////////////////////////////////////////////////////////////////////////
+
+package api
+
+import (
+	"bytes"
+	"gitlab.com/xx_network/crypto/csprng"
+	xxMnemonic "gitlab.com/xx_network/crypto/mnemonic"
+	"gitlab.com/xx_network/primitives/utils"
+	"io"
+	"math/rand"
+	"testing"
+)
+
+func TestStoreSecretWithMnemonic(t *testing.T) {
+	secret := []byte("test123")
+	storageDir := "ignore.1"
+	mnemonic, err := StoreSecretWithMnemonic(secret, storageDir)
+	if err != nil {
+		t.Errorf("StoreSecretWithMnemonic error; %v", err)
+	}
+
+	// Tests the mnemonic returned is valid
+	_, err = xxMnemonic.DecodeMnemonic(mnemonic)
+	if err != nil {
+		t.Errorf("StoreSecretWithMnemonic did not return a decodable mnemonic: %v", err)
+	}
+
+	// Test that the file was written to
+	if !utils.Exists(storageDir + mnemonicFile) {
+		t.Errorf("Mnemonic file does not exist in storage: %v", err)
+	}
+
+}
+
+func TestEncryptDecryptMnemonic(t *testing.T) {
+	prng := NewPrng(32)
+
+	// Generate a test mnemonic
+	testMnemonic, err := xxMnemonic.GenerateMnemonic(prng, 32)
+	if err != nil {
+		t.Fatalf("GenerateMnemonic error: %v", err)
+	}
+
+	decodedMnemonic, err := xxMnemonic.DecodeMnemonic(testMnemonic)
+	if err != nil {
+		t.Fatalf("DecodeMnemonic error: %v", err)
+	}
+
+	secret := []byte("test123")
+
+	// Encrypt the secret
+	ciphertext, err := encryptWithMnemonic(secret, decodedMnemonic, prng)
+	if err != nil {
+		t.Fatalf("encryptWithMnemonic error: %v", err)
+	}
+
+	// Decrypt the secret
+	received, err := decryptWithMnemonic(ciphertext, decodedMnemonic)
+	if err != nil {
+		t.Fatalf("decryptWithMnemonic error: %v", err)
+	}
+
+	// Test if secret matches decrypted data
+	if !bytes.Equal(received, secret) {
+		t.Fatalf("Decrypted data does not match original plaintext."+
+			"\n\tExpected: %v\n\tReceived: %v", secret, received)
+	}
+}
+
+func TestLoadSecretWithMnemonic(t *testing.T) {
+	secret := []byte("test123")
+	storageDir := "ignore.1"
+	mnemonic, err := StoreSecretWithMnemonic(secret, storageDir)
+	if err != nil {
+		t.Errorf("StoreSecretWithMnemonic error; %v", err)
+	}
+
+	received, err := LoadSecretWithMnemonic(mnemonic, storageDir)
+	if err != nil {
+		t.Errorf("LoadSecretWithMnemonic error: %v", err)
+	}
+
+	if !bytes.Equal(received, secret) {
+		t.Fatalf("Loaded secret does not match original data."+
+			"\n\tExpected: %v\n\tReceived: %v", secret, received)
+	}
+}
+
+// Prng is a PRNG that satisfies the csprng.Source interface.
+type Prng struct{ prng io.Reader }
+
+func NewPrng(seed int64) csprng.Source     { return &Prng{rand.New(rand.NewSource(seed))} }
+func (s *Prng) Read(b []byte) (int, error) { return s.prng.Read(b) }
+func (s *Prng) SetSeed([]byte) error       { return nil }