Commit aec3694b987900de7ab789ea5749d673e0d634c4

Authored by Rik Snel
Committed by David S. Miller
1 parent cc44215eaa

[CRYPTO] lib: some common 128-bit block operations, nicely centralized

128bit is a common blocksize in linux kernel cryptography, so it helps to
centralize some common operations.

The code, while mostly trivial, is based on a header file mode_hdr.h in
http://fp.gladman.plus.com/AES/modes.vc8.19-06-06.zip

The original copyright (and GPL statement) of the original author,
Dr Brian Gladman, is preserved.

Signed-off-by: Rik Snel <rsnel@cube.dyndns.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Showing 1 changed file with 80 additions and 0 deletions Side-by-side Diff

include/crypto/b128ops.h
  1 +/* b128ops.h - common 128-bit block operations
  2 + *
  3 + * Copyright (c) 2003, Dr Brian Gladman, Worcester, UK.
  4 + * Copyright (c) 2006, Rik Snel <rsnel@cube.dyndns.org>
  5 + *
  6 + * Based on Dr Brian Gladman's (GPL'd) work published at
  7 + * http://fp.gladman.plus.com/cryptography_technology/index.htm
  8 + * See the original copyright notice below.
  9 + *
  10 + * This program is free software; you can redistribute it and/or modify it
  11 + * under the terms of the GNU General Public License as published by the Free
  12 + * Software Foundation; either version 2 of the License, or (at your option)
  13 + * any later version.
  14 + */
  15 +/*
  16 + ---------------------------------------------------------------------------
  17 + Copyright (c) 2003, Dr Brian Gladman, Worcester, UK. All rights reserved.
  18 +
  19 + LICENSE TERMS
  20 +
  21 + The free distribution and use of this software in both source and binary
  22 + form is allowed (with or without changes) provided that:
  23 +
  24 + 1. distributions of this source code include the above copyright
  25 + notice, this list of conditions and the following disclaimer;
  26 +
  27 + 2. distributions in binary form include the above copyright
  28 + notice, this list of conditions and the following disclaimer
  29 + in the documentation and/or other associated materials;
  30 +
  31 + 3. the copyright holder's name is not used to endorse products
  32 + built using this software without specific written permission.
  33 +
  34 + ALTERNATIVELY, provided that this notice is retained in full, this product
  35 + may be distributed under the terms of the GNU General Public License (GPL),
  36 + in which case the provisions of the GPL apply INSTEAD OF those given above.
  37 +
  38 + DISCLAIMER
  39 +
  40 + This software is provided 'as is' with no explicit or implied warranties
  41 + in respect of its properties, including, but not limited to, correctness
  42 + and/or fitness for purpose.
  43 + ---------------------------------------------------------------------------
  44 + Issue Date: 13/06/2006
  45 +*/
  46 +
  47 +#ifndef _CRYPTO_B128OPS_H
  48 +#define _CRYPTO_B128OPS_H
  49 +
  50 +#include <linux/types.h>
  51 +
  52 +typedef struct {
  53 + u64 a, b;
  54 +} u128;
  55 +
  56 +typedef struct {
  57 + __be64 a, b;
  58 +} be128;
  59 +
  60 +typedef struct {
  61 + __le64 b, a;
  62 +} le128;
  63 +
  64 +static inline void u128_xor(u128 *r, const u128 *p, const u128 *q)
  65 +{
  66 + r->a = p->a ^ q->a;
  67 + r->b = p->b ^ q->b;
  68 +}
  69 +
  70 +static inline void be128_xor(be128 *r, const be128 *p, const be128 *q)
  71 +{
  72 + u128_xor((u128 *)r, (u128 *)p, (u128 *)q);
  73 +}
  74 +
  75 +static inline void le128_xor(le128 *r, const le128 *p, const le128 *q)
  76 +{
  77 + u128_xor((u128 *)r, (u128 *)p, (u128 *)q);
  78 +}
  79 +
  80 +#endif /* _CRYPTO_B128OPS_H */