@@ -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
367377func 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+
578618func EncryptAES (data []byte , key []byte ) ([]byte , error ) {
579619 block , err := aes .NewCipher (key )
580620 if err != nil {
0 commit comments