mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	Add two new variables:
file_key_management_digest={sha1|sha224|sha256|sha384|sha512}
This specify the digest function to use in key derivation of the key
used for decryption of the keyfile.
file_key_management_use_pbkdf2=N
This specify whether pbkdf2 is used in the key derivation, and if
so (N != 0), how many iterations.
		
	
			
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* Copyright (C) 2014 eperi GmbH.
 | 
						|
 | 
						|
 This program is free software; you can redistribute it and/or modify
 | 
						|
 it under the terms of the GNU General Public License as published by
 | 
						|
 the Free Software Foundation; version 2 of the License.
 | 
						|
 | 
						|
 This program is distributed in the hope that it will be useful,
 | 
						|
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
 GNU General Public License for more details.
 | 
						|
 | 
						|
 You should have received a copy of the GNU General Public License
 | 
						|
 along with this program; if not, write to the Free Software
 | 
						|
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA */
 | 
						|
 | 
						|
/******************************************************************//**
 | 
						|
@file Parser.h
 | 
						|
A structure and class to keep keys for encryption/decryption.
 | 
						|
 | 
						|
Created 09/15/2014
 | 
						|
***********************************************************************/
 | 
						|
 | 
						|
#include <my_crypt.h>
 | 
						|
#include <ctype.h>
 | 
						|
#include <map>
 | 
						|
#include <stdlib.h> /* size_t */
 | 
						|
 | 
						|
struct keyentry {
 | 
						|
  unsigned int id;
 | 
						|
  unsigned char key[MY_AES_MAX_KEY_LENGTH];
 | 
						|
  unsigned int length;
 | 
						|
};
 | 
						|
 | 
						|
class Parser
 | 
						|
{
 | 
						|
  const char *filename;
 | 
						|
  const char *filekey;
 | 
						|
  const enum my_digest digest;
 | 
						|
  const uint use_pbkdf2;
 | 
						|
  unsigned int line_number;
 | 
						|
 | 
						|
  unsigned int from_hex(char c)
 | 
						|
  { return c <= '9' ? c - '0' : tolower(c) - 'a' + 10; }
 | 
						|
 | 
						|
  bool read_filekey(const char *filekey, char *secret);
 | 
						|
  bool parse_file(std::map<unsigned int ,keyentry> *keys, const char *secret);
 | 
						|
  void report_error(const char *reason, size_t position);
 | 
						|
  int parse_line(char **line_ptr, keyentry *key);
 | 
						|
  char* read_and_decrypt_file(const char *secret);
 | 
						|
 | 
						|
public:
 | 
						|
  Parser(const char* fn, const char *fk, enum my_digest digest,
 | 
						|
         uint use_pbkdf2) :
 | 
						|
  filename(fn), filekey(fk), digest(digest), use_pbkdf2(use_pbkdf2),
 | 
						|
  line_number(0) { }
 | 
						|
  bool parse(std::map<unsigned int ,keyentry> *keys);
 | 
						|
};
 |