Skip to content

Commit 120f512

Browse files
authored
Multi Level Encryption
Adding different levels of encryption. 1. Easy - Just use the salt phrase (machine generated AES encryption 2. Medium - Use a password / pin and the salt phrase 3. Hard - Use all of the above including your Keycard implant, adding the "Something you have" into the secure cryptography. In future will also add "Best" level. (Incomplete) 4. Best - Utilize PGP on chip to perform encryption *in-vivo* Signed-off-by: Anthony Grace <[email protected]>
1 parent 1b1d3a4 commit 120f512

File tree

1 file changed

+122
-82
lines changed

1 file changed

+122
-82
lines changed

main.go

Lines changed: 122 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,13 @@ func main() {
5151

5252
switch choice {
5353
case "1":
54+
level := "medium" // Example encryption level
5455
filename, err := generalAskUser("Enter the filename to encrypt: ")
5556
if err != nil {
5657
fmt.Println("Error:", err)
5758
continue
5859
}
59-
if err := encryptFile(filename); err != nil {
60+
if err := encryptFile(filename, level); err != nil {
6061
fmt.Println("Error:", err)
6162
}
6263

@@ -280,30 +281,30 @@ func generalAskUser(question string) (string, error) {
280281

281282

282283

283-
func saveCID(cid string) error {
284+
func saveCID(cid string, level string) error {
284285
f, err := os.OpenFile("log_CID.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
285286
if err != nil {
286287
return err
287288
}
288289
defer f.Close()
289290

290-
if _, err := f.WriteString(cid + "\n"); err != nil {
291+
logEntry := fmt.Sprintf("%s,%s\n", cid, level) // Format: "cid,level"
292+
if _, err := f.WriteString(logEntry); err != nil {
291293
return err
292294
}
293295

294296
return nil
295297
}
296298

297299

298-
299-
func ipfsUpload(filePath string) error {
300+
func ipfsUpload(filePath string, level string) error {
300301
cid, err := ipfs_link.AddFileToIPFS(filePath)
301302
if err != nil {
302303
return fmt.Errorf("\033[1;31merror uploading file to IPFS: %w\033[0m", err)
303304
}
304305

305-
if err := saveCID(cid); err != nil {
306-
return fmt.Errorf("\033[1;31merror saving CID: %w\033[0m", err)
306+
if err := saveCID(cid, level); err != nil {
307+
return fmt.Errorf("\033[1;31merror saving CID and level: %w\033[0m", err)
307308
}
308309

309310
fmt.Printf("\033[1;32mFile uploaded to IPFS successfully, CID:\n%s\033[0m\n", cid)
@@ -363,6 +364,15 @@ func askUserYN(question string) bool {
363364

364365

365366

367+
func getEncryptionLevelForCID(){
368+
//used only for the CID log
369+
//read the encryption level associated with that cid
370+
//if none "Sorry, the level could not be found in the log, which one is it for this file? select manually what it should be
371+
// > 1 Easy
372+
// > 2 Medium
373+
// > 3 Hard
374+
375+
}
366376

367377
func decryptFileFromLog() error {
368378
cids, err := readCIDLog("log_CID.log")
@@ -375,8 +385,11 @@ func decryptFileFromLog() error {
375385
continue
376386
}
377387

388+
389+
level := getEncryptionLevelForCID(cid) // Implement this based on your logging mechanism
390+
378391
fmt.Printf("\033[1;34mDecrypting file for CID: %s\033[0m\n", cid)
379-
err := decryptSingleFile(cid)
392+
err := decryptSingleFile(cid, level) // Use the obtained level here
380393
if err != nil {
381394
fmt.Printf("\033[1;31mError decrypting file for CID %s: %v\033[0m\n", cid, err)
382395
continue
@@ -387,41 +400,45 @@ func decryptFileFromLog() error {
387400
return nil
388401
}
389402

390-
391-
392-
func decryptSingleFile(cid string) error {
403+
func decryptSingleFile(cid string, level string) error {
393404
ipfsFilePath := "retrieved_" + cid
394405

395406
err := ipfs_link.GetFileFromIPFS(cid, ipfsFilePath)
396407
if err != nil {
397408
return fmt.Errorf("\033[1;31merror retrieving file from IPFS: %w\033[0m", err)
398409
}
399410

400-
art_link.PrintFileSlowly("scannow.txt")
401-
art_link.PrintFileSlowly("flex_implant.txt")
411+
var combinedKey string
412+
var saltPhrase string
413+
var passphrase string
402414

403-
publicKey, err := keycard_link.GetKeycardPublicKey()
404-
if err != nil {
405-
return fmt.Errorf("\033[1;31merror getting Keycard public key: %w\033[0m", err)
406-
}
407-
408-
passphrase, err := keycard_link.ReadPassphrase()
409-
if err != nil {
410-
return fmt.Errorf("\033[1;31merror reading passphrase: %w\033[0m", err)
415+
if level == "medium" || level == "hard" {
416+
passphrase, err = generalAskUser("Enter your passphrase for the file: ")
417+
if err != nil {
418+
return fmt.Errorf("\033[1;31merror reading passphrase: %w\033[0m", err)
419+
}
411420
}
412421

413-
saltPhrase, err := generalAskUser("Enter the salt phrase for decryption: ")
422+
saltPhrase, err = generalAskUser("Enter the salt phrase used for encryption (Machine generated 3 words): ")
414423
if err != nil {
415424
return fmt.Errorf("\033[1;31merror reading salt phrase: %w\033[0m", err)
416425
}
417426

418-
combinedKey := fmt.Sprintf("%s%s", publicKey, passphrase)
427+
if level == "hard" {
428+
publicKey, err := keycard_link.GetKeycardPublicKey()
429+
if err != nil {
430+
return fmt.Errorf("\033[1;31merror getting Keycard public key: %w\033[0m", err)
431+
}
432+
combinedKey = passphrase + saltPhrase + publicKey
433+
} else {
434+
combinedKey = passphrase + saltPhrase
435+
}
419436

420437
fmt.Println("\033[1;34mGenerating the key using PBKDF2 for decryption...\033[0m")
421438
combinedKeyBytes := []byte(combinedKey)
422439
saltBytes := []byte(saltPhrase)
423440
iterationCount := 1000000
424-
aesKey := pbkdf2.Key(combinedKeyBytes, saltBytes, iterationCount, 32, sha256.New) // 32 byte AES-256
441+
aesKey := pbkdf2.Key(combinedKeyBytes, saltBytes, iterationCount, 32, sha256.New)
425442

426443
encryptedData, err := os.ReadFile(ipfsFilePath)
427444
if err != nil {
@@ -463,118 +480,141 @@ func generateThreeWordPhrase() (string, error) {
463480
return fmt.Sprintf("%s %s %s", phrase[0], phrase[1], phrase[2]), nil
464481
}
465482

466-
func encryptFile(filename string) error {
467-
468-
publicKey, err := keycard_link.GetKeycardPublicKey()
483+
func decryptFile(filename string) error {
484+
cid, err := generalAskUser("Enter the CID for the file to decrypt: ")
469485
if err != nil {
470-
return fmt.Errorf("\033[1;31merror getting Keycard public key: %w\033[0m", err)
486+
return fmt.Errorf("\033[1;31merror reading CID: %w\033[0m", err)
471487
}
472488

473-
passphrase, err := keycard_link.ReadPassphrase()
489+
ipfsFilePath := "retrieved_" + filename
490+
491+
err = ipfs_link.GetFileFromIPFS(cid, ipfsFilePath)
474492
if err != nil {
475-
return fmt.Errorf("\033[1;31merror reading passphrase: %w\033[0m", err)
493+
return fmt.Errorf("\033[1;31merror retrieving file from IPFS: %w\033[0m", err)
476494
}
477-
fmt.Println("\033[1;36mThe machine will generate three random words, write these down (Used in conjunction with your passphrase.)\033[0m")
478495

479-
saltPhrase, err := generateThreeWordPhrase()
496+
level, err := generalAskUser("Enter the encryption level used (easy, medium, hard): ")
480497
if err != nil {
481-
return fmt.Errorf("\033[1;31merror generating salt phrase: %w\033[0m", err)
498+
return fmt.Errorf("\033[1;31merror reading encryption level: %w\033[0m", err)
482499
}
483500

484-
fmt.Println("\033[1;32m" + saltPhrase + "\033[0m")
485-
fmt.Println("\033[1;33mSave these three words and your passphrase to decrypt your files!\033[0m")
501+
var combinedKey string
502+
var passphrase string
503+
var saltPhrase string
486504

487-
combinedKey := fmt.Sprintf("%s%s", publicKey, passphrase)
505+
if level == "medium" || level == "hard" {
506+
passphrase, err = generalAskUser("Enter your passphrase for the file: ")
507+
if err != nil {
508+
return fmt.Errorf("\033[1;31merror reading passphrase: %w\033[0m", err)
509+
}
510+
}
488511

489-
fmt.Println("\033[1;34mGenerating the key using PBKDF2 for encryption...\033[0m")
512+
saltPhrase, err = generalAskUser("Enter the salt phrase used for encryption (Machine generated 3 words): ")
513+
if err != nil {
514+
return fmt.Errorf("\033[1;31merror reading salt phrase: %w\033[0m", err)
515+
}
516+
517+
if level == "hard" {
518+
publicKey, err := keycard_link.GetKeycardPublicKey()
519+
if err != nil {
520+
return fmt.Errorf("\033[1;31merror getting Keycard public key: %w\033[0m", err)
521+
}
522+
combinedKey = passphrase + saltPhrase + publicKey
523+
} else {
524+
combinedKey = passphrase + saltPhrase
525+
}
526+
527+
fmt.Println("\033[1;34mGenerating the key using PBKDF2 for decryption...\033[0m")
490528
combinedKeyBytes := []byte(combinedKey)
491529
saltBytes := []byte(saltPhrase)
492530
iterationCount := 1000000
493-
aesKey := pbkdf2.Key(combinedKeyBytes, saltBytes, iterationCount, 32, sha256.New) // 32 byte AES-256
531+
aesKey := pbkdf2.Key(combinedKeyBytes, saltBytes, iterationCount, 32, sha256.New)
494532

495-
data, err := os.ReadFile(filename)
533+
encryptedData, err := os.ReadFile(ipfsFilePath)
496534
if err != nil {
497-
return fmt.Errorf("\033[1;31merror reading file to encrypt: %w\033[0m", err)
535+
return fmt.Errorf("\033[1;31merror reading encrypted file: %w\033[0m", err)
498536
}
499537

500-
encryptedData, err := EncryptAES(data, aesKey)
538+
decryptedData, err := DecryptAES(encryptedData, aesKey)
501539
if err != nil {
502-
return fmt.Errorf("\033[1;31merror encrypting file: %w\033[0m", err)
540+
fmt.Println("\033[1;33mDid you input the correct passphrase and salt phrase?\033[0m")
541+
return fmt.Errorf("\033[1;31merror decrypting file: %w\033[0m", err)
503542
}
504543

505-
encryptedFilename := filename + ".aes"
506-
err = os.WriteFile(encryptedFilename, encryptedData, 0644)
544+
decryptedFilePath := "decrypted_" + cid
545+
err = os.WriteFile(decryptedFilePath, decryptedData, 0644)
507546
if err != nil {
508-
return fmt.Errorf("\033[1;31merror writing encrypted file: %w\033[0m", err)
509-
}
510-
fmt.Printf("\033[1;32mFile encrypted successfully: %s\033[0m\n", encryptedFilename)
511-
512-
if askUserYN("Do you want to upload the encrypted file to IPFS?") {
513-
if err := ipfsUpload(encryptedFilename); err != nil {
514-
return fmt.Errorf("\033[1;31merror uploading file to IPFS: %w\033[0m", err)
515-
}
547+
return fmt.Errorf("\033[1;31merror writing decrypted file: %w\033[0m", err)
516548
}
517549

550+
fmt.Printf("\033[1;32mFile decrypted successfully: %s\033[0m\n", decryptedFilePath)
518551
return nil
519552
}
520553

521-
func decryptFile(filename string) error {
522-
cid, err := generalAskUser("Enter the CID for the file to decrypt: ")
523-
if err != nil {
524-
return fmt.Errorf("\033[1;31merror reading CID: %w\033[0m", err)
525-
}
526554

527-
ipfsFilePath := "retrieved_" + filename
528555

529-
erro := ipfs_link.GetFileFromIPFS(cid, ipfsFilePath)
530-
if erro != nil {
531-
return fmt.Errorf("\033[1;31merror retrieving file from IPFS: %w\033[0m", erro)
532-
}
556+
func encryptFile(filename string, level string) error {
557+
var passphrase string
558+
var err error
533559

534-
publicKey, err := keycard_link.GetKeycardPublicKey()
535-
if err != nil {
536-
return fmt.Errorf("\033[1;31merror getting Keycard public key: %w\033[0m", err)
560+
if level == "medium" || level == "hard" {
561+
passphrase, err = generalAskUser("Enter a passphrase for this file: ")
562+
if err != nil {
563+
return fmt.Errorf("\033[1;31merror reading passphrase: %w\033[0m", err)
564+
}
537565
}
538566

539-
passphrase, err := keycard_link.ReadPassphrase()
567+
saltPhrase, err := generateThreeWordPhrase()
540568
if err != nil {
541-
return fmt.Errorf("\033[1;31merror reading passphrase: %w\033[0m", err)
569+
return fmt.Errorf("\033[1;31merror generating salt phrase: %w\033[0m", err)
542570
}
543571

544-
saltPhrase, err := generalAskUser("Enter the salt phrase for decryption: ")
545-
if err != nil {
546-
return fmt.Errorf("\033[1;31merror reading salt phrase: %w\033[0m", err)
572+
var combinedKey string
573+
if level == "hard" {
574+
publicKey, err := keycard_link.GetKeycardPublicKey()
575+
if err != nil {
576+
return fmt.Errorf("\033[1;31merror getting Keycard public key: %w\033[0m", err)
577+
}
578+
combinedKey = passphrase + publicKey // Using passphrase and publicKey for hard level
579+
} else if level == "medium" {
580+
combinedKey = passphrase // Using only passphrase for medium level
581+
} else {
582+
combinedKey = "" // No passphrase for easy level
547583
}
548584

549-
combinedKey := fmt.Sprintf("%s%s", publicKey, passphrase)
550-
551-
fmt.Println("\033[1;34mGenerating the key using PBKDF2 for decryption...\033[0m")
585+
fmt.Println("\033[1;34mGenerating the key using PBKDF2 for encryption...\033[0m")
552586
combinedKeyBytes := []byte(combinedKey)
553587
saltBytes := []byte(saltPhrase)
554588
iterationCount := 1000000
555589
aesKey := pbkdf2.Key(combinedKeyBytes, saltBytes, iterationCount, 32, sha256.New) // 32 byte AES-256
556590

557-
encryptedData, err := os.ReadFile(ipfsFilePath)
591+
data, err := os.ReadFile(filename)
558592
if err != nil {
559-
return fmt.Errorf("\033[1;31merror reading encrypted file: %w\033[0m", err)
593+
return fmt.Errorf("\033[1;31merror reading file to encrypt: %w\033[0m", err)
560594
}
561595

562-
decryptedData, err := DecryptAES(encryptedData, aesKey)
596+
encryptedData, err := EncryptAES(data, aesKey)
563597
if err != nil {
564-
return fmt.Errorf("\033[1;31merror decrypting file: %w\033[0m", err)
598+
return fmt.Errorf("\033[1;31merror encrypting file: %w\033[0m", err)
565599
}
566600

567-
decryptedFilePath := "decrypted_" + cid
568-
569-
err = os.WriteFile(decryptedFilePath, decryptedData, 0644)
601+
encryptedFilename := filename + ".aes"
602+
err = os.WriteFile(encryptedFilename, encryptedData, 0644)
570603
if err != nil {
571-
return fmt.Errorf("\033[1;31merror writing decrypted file: %w\033[0m", err)
604+
return fmt.Errorf("\033[1;31merror writing encrypted file: %w\033[0m", err)
572605
}
606+
fmt.Printf("\033[1;32mFile encrypted successfully: %s\033[0m\n", encryptedFilename)
573607

574-
fmt.Printf("\033[1;32mFile decrypted successfully: %s\033[0m\n", decryptedFilePath)
608+
if askUserYN("Do you want to upload the encrypted file to IPFS?") {
609+
if err := ipfsUpload(encryptedFilename, level); err != nil {
610+
return fmt.Errorf("\033[1;31merror uploading file to IPFS: %w\033[0m", err)
611+
}
612+
}
575613
return nil
576614
}
577615

616+
617+
578618
func EncryptAES(data []byte, key []byte) ([]byte, error) {
579619
block, err := aes.NewCipher(key)
580620
if err != nil {

0 commit comments

Comments
 (0)