Marco Ricci commited on 2025-01-19 21:10:38
              Zeige 1 geänderte Dateien mit 32 Einfügungen und 23 Löschungen.
            
This implementation ought to appear in the documentation, which it cannot if it stays an inner function.
| ... | ... | 
                      @@ -548,28 +548,8 @@ class VaultNativeV02ConfigParser(VaultNativeConfigParser):  | 
                  
| 548 | 548 | 
                        """  | 
                    
| 549 | 549 | 
                        return base64.standard_b64encode(self._message)  | 
                    
| 550 | 550 | 
                         | 
                    
| 551 | 
                        - def _make_decryptor(self) -> ciphers.CipherContext:  | 
                    |
| 552 | 
                        - """Return the cipher context object used for decryption.  | 
                    |
| 553 | 
                        -  | 
                    |
| 554 | 
                        - This is a standard AES256-CBC cipher context. The encryption key  | 
                    |
| 555 | 
                        - and the IV are derived via the OpenSSL `EVP_BytesToKey` function  | 
                    |
| 556 | 
                        - (using MD5, no salt, and one iteration). This is what the  | 
                    |
| 557 | 
                        - Node.js `crypto` library (v21 series and older) used in its  | 
                    |
| 558 | 
                        -        implementation of `crypto.createCipher("aes256", password)`.
                       | 
                    |
| 559 | 
                        -  | 
                    |
| 560 | 
                        - Danger: Insecure use of cryptography  | 
                    |
| 561 | 
                        - This function makes use of (an implementation of) the  | 
                    |
| 562 | 
                        - OpenSSL function `EVP_BytesToKey`, which generates  | 
                    |
| 563 | 
                        - cryptographically weak keys, without any attempts at  | 
                    |
| 564 | 
                        - mitigating its insecurity. We provide this function for the  | 
                    |
| 565 | 
                        - purpose of interoperability with existing vault  | 
                    |
| 566 | 
                        - installations. Do not rely on this system to keep your  | 
                    |
| 567 | 
                        - vault configuration secure against access by even moderately  | 
                    |
| 568 | 
                        - determined attackers!  | 
                    |
| 569 | 
                        -  | 
                    |
| 570 | 
                        - """  | 
                    |
| 571 | 
                        -  | 
                    |
| 572 | 
                        - def evp_bytestokey_md5_one_iteration_no_salt(  | 
                    |
| 551 | 
                        + @staticmethod  | 
                    |
| 552 | 
                        + def _evp_bytestokey_md5_one_iteration_no_salt(  | 
                    |
| 573 | 553 | 
                        data: bytes, key_size: int, iv_size: int  | 
                    
| 574 | 554 | 
                        ) -> tuple[bytes, bytes]:  | 
                    
| 575 | 555 | 
                        """Reimplement OpenSSL's `EVP_BytesToKey` with fixed parameters.  | 
                    
| ... | ... | 
                      @@ -619,6 +600,15 @@ class VaultNativeV02ConfigParser(VaultNativeConfigParser):  | 
                  
| 619 | 600 | 
                        A 2-tuple containing the derived encryption key and the  | 
                    
| 620 | 601 | 
                        derived initialization vector.  | 
                    
| 621 | 602 | 
                         | 
                    
| 603 | 
                        + Danger: Insecure use of cryptography  | 
                    |
| 604 | 
                        + This function reimplements the OpenSSL function  | 
                    |
| 605 | 
                        + `EVP_BytesToKey`, which generates cryptographically weak  | 
                    |
| 606 | 
                        + keys, without any attempts at mitigating its insecurity. We  | 
                    |
| 607 | 
                        + provide this function for the purpose of interoperability  | 
                    |
| 608 | 
                        + with existing vault installations. Do not rely on this  | 
                    |
| 609 | 
                        + system to keep your vault configuration secure against  | 
                    |
| 610 | 
                        + access by even moderately determined attackers!  | 
                    |
| 611 | 
                        +  | 
                    |
| 622 | 612 | 
                        """  | 
                    
| 623 | 613 | 
                        total_size = key_size + iv_size  | 
                    
| 624 | 614 | 
                        buffer = bytearray()  | 
                    
| ... | ... | 
                      @@ -662,8 +652,28 @@ class VaultNativeV02ConfigParser(VaultNativeConfigParser):  | 
                  
| 662 | 652 | 
                        )  | 
                    
| 663 | 653 | 
                        return bytes(buffer[:key_size]), bytes(buffer[key_size:total_size])  | 
                    
| 664 | 654 | 
                         | 
                    
| 655 | 
                        + def _make_decryptor(self) -> ciphers.CipherContext:  | 
                    |
| 656 | 
                        + """Return the cipher context object used for decryption.  | 
                    |
| 657 | 
                        +  | 
                    |
| 658 | 
                        + This is a standard AES256-CBC cipher context. The encryption key  | 
                    |
| 659 | 
                        + and the IV are derived via the OpenSSL `EVP_BytesToKey` function  | 
                    |
| 660 | 
                        + (using MD5, no salt, and one iteration). This is what the  | 
                    |
| 661 | 
                        + Node.js `crypto` library (v21 series and older) used in its  | 
                    |
| 662 | 
                        +        implementation of `crypto.createCipher("aes256", password)`.
                       | 
                    |
| 663 | 
                        +  | 
                    |
| 664 | 
                        + Danger: Insecure use of cryptography  | 
                    |
| 665 | 
                        + This function makes use of (an implementation of) the  | 
                    |
| 666 | 
                        + OpenSSL function `EVP_BytesToKey`, which generates  | 
                    |
| 667 | 
                        + cryptographically weak keys, without any attempts at  | 
                    |
| 668 | 
                        + mitigating its insecurity. We provide this function for the  | 
                    |
| 669 | 
                        + purpose of interoperability with existing vault  | 
                    |
| 670 | 
                        + installations. Do not rely on this system to keep your  | 
                    |
| 671 | 
                        + vault configuration secure against access by even moderately  | 
                    |
| 672 | 
                        + determined attackers!  | 
                    |
| 673 | 
                        +  | 
                    |
| 674 | 
                        + """  | 
                    |
| 665 | 675 | 
                        data = base64.standard_b64encode(self._iv + self._encryption_key)  | 
                    
| 666 | 
                        - encryption_key, iv = evp_bytestokey_md5_one_iteration_no_salt(  | 
                    |
| 676 | 
                        + encryption_key, iv = self._evp_bytestokey_md5_one_iteration_no_salt(  | 
                    |
| 667 | 677 | 
                        data, key_size=32, iv_size=16  | 
                    
| 668 | 678 | 
                        )  | 
                    
| 669 | 679 | 
                        return ciphers.Cipher(  | 
                    
| 670 | 680 |