75 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * crypto_mode.c --- convert between encryption modes and strings
 | |
|  *
 | |
|  * Copyright (C) 1999  Theodore Ts'o <tytso@mit.edu>
 | |
|  *
 | |
|  * %Begin-Header%
 | |
|  * This file may be redistributed under the terms of the GNU Library
 | |
|  * General Public License, version 2.
 | |
|  * %End-Header%
 | |
|  */
 | |
| 
 | |
| #include "config.h"
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| #include <strings.h>
 | |
| #include <ctype.h>
 | |
| #include <errno.h>
 | |
| 
 | |
| #include "e2p.h"
 | |
| 
 | |
| struct mode {
 | |
| 	int		num;
 | |
| 	const char	*string;
 | |
| };
 | |
| 
 | |
| static struct mode mode_list[] = {
 | |
| 	{	EXT4_ENCRYPTION_MODE_INVALID,		"Invalid"},
 | |
| 	{	EXT4_ENCRYPTION_MODE_AES_256_XTS,	"AES-256-XTS"},
 | |
| 	{	EXT4_ENCRYPTION_MODE_AES_256_GCM,	"AES-256-GCM"},
 | |
| 	{	EXT4_ENCRYPTION_MODE_AES_256_CBC,	"AES-256-CBC"},
 | |
| 	{	0, 0 },
 | |
| };
 | |
| 
 | |
| const char *e2p_encmode2string(int num)
 | |
| {
 | |
| 	struct mode  *p;
 | |
| 	static char buf[20];
 | |
| 
 | |
| 	for (p = mode_list; p->string; p++) {
 | |
| 		if (num == p->num)
 | |
| 			return p->string;
 | |
| 	}
 | |
| 	sprintf(buf, "ENC_MODE_%d", num);
 | |
| 	return buf;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Returns the hash algorithm, or -1 on error
 | |
|  */
 | |
| int e2p_string2encmode(char *string)
 | |
| {
 | |
| 	struct mode	*p;
 | |
| 	char		*eptr;
 | |
| 	int		num;
 | |
| 
 | |
| 	for (p = mode_list; p->string; p++) {
 | |
| 		if (!strcasecmp(string, p->string)) {
 | |
| 			return p->num;
 | |
| 		}
 | |
| 	}
 | |
| 	if (strncasecmp(string, "ENC_MODE_", 9))
 | |
| 		return -1;
 | |
| 
 | |
| 	if (string[9] == 0)
 | |
| 		return -1;
 | |
| 	num = strtol(string+9, &eptr, 10);
 | |
| 	if (num > 255 || num < 0)
 | |
| 		return -1;
 | |
| 	if (*eptr)
 | |
| 		return -1;
 | |
| 	return num;
 | |
| }
 | |
| 
 |