| api.h | | api.h | |
| /* | | /* | |
|
| * Copyright (c) 2001, 2002 Virtual Unlimited B.V. | | * Copyright (c) 2001, 2002, 2004 Beeyond Software Holding BV | |
| * | | * | |
| * This library is free software; you can redistribute it and/or | | * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | | * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | | * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | | * version 2.1 of the License, or (at your option) any later version. | |
| * | | * | |
| * This library is distributed in the hope that it will be useful, | | * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | | * Lesser General Public License for more details. | |
| | | | |
| skipping to change at line 58 | | skipping to change at line 58 | |
| # define BEECRYPTAPI | | # define BEECRYPTAPI | |
| # define BEECRYPTCXXAPI | | # define BEECRYPTCXXAPI | |
| #endif | | #endif | |
| | | | |
| #ifndef ROTL32 | | #ifndef ROTL32 | |
| # define ROTL32(x, s) (((x) << (s)) | ((x) >> (32 - (s)))) | | # define ROTL32(x, s) (((x) << (s)) | ((x) >> (32 - (s)))) | |
| #endif | | #endif | |
| #ifndef ROTR32 | | #ifndef ROTR32 | |
| # define ROTR32(x, s) (((x) >> (s)) | ((x) << (32 - (s)))) | | # define ROTR32(x, s) (((x) >> (s)) | ((x) << (32 - (s)))) | |
| #endif | | #endif | |
|
| | | #ifndef ROTR64 | |
| | | # define ROTR64(x, s) (((x) >> (s)) | ((x) << (64 - (s)))) | |
| | | #endif | |
| | | | |
| typedef uint8_t byte; | | typedef uint8_t byte; | |
| | | | |
| typedef int8_t javabyte; | | typedef int8_t javabyte; | |
| typedef int16_t javashort; | | typedef int16_t javashort; | |
| typedef int32_t javaint; | | typedef int32_t javaint; | |
| typedef int64_t javalong; | | typedef int64_t javalong; | |
| | | | |
| typedef uint16_t javachar; | | typedef uint16_t javachar; | |
| | | | |
| | | | |
End of changes. 2 change blocks. |
| 1 lines changed or deleted | | 4 lines changed or added | |
|
| beecrypt.h | | beecrypt.h | |
| | | | |
| skipping to change at line 575 | | skipping to change at line 575 | |
| * \sa aesParam, blowfishParam. | | * \sa aesParam, blowfishParam. | |
| * \ingroup BC_m | | * \ingroup BC_m | |
| */ | | */ | |
| typedef void blockCipherParam; | | typedef void blockCipherParam; | |
| | | | |
| /*!\brief Prototype definition for a setup function. | | /*!\brief Prototype definition for a setup function. | |
| * \ingroup BC_m | | * \ingroup BC_m | |
| */ | | */ | |
| typedef int (*blockCipherSetup )(blockCipherParam*, const byte*, size_t, c
ipherOperation); | | typedef int (*blockCipherSetup )(blockCipherParam*, const byte*, size_t, c
ipherOperation); | |
| | | | |
|
| /*!\typedef int (*blockCipherSetIV)(blockCipherPatam* bp, const byte* iv) | | /*!\typedef int (*blockCipherSetIV)(blockCipherParam* bp, const byte* iv) | |
| * \brief Prototype definition for an initialization vector setup function. | | * \brief Prototype definition for an initialization vector setup function. | |
| * \param bp The blockcipher's parameters. | | * \param bp The blockcipher's parameters. | |
| * \param iv The blockciphers' IV value. | | * \param iv The blockciphers' IV value. | |
| * \note iv length must be equal to the cipher's block size. | | * \note iv length must be equal to the cipher's block size. | |
| * \retval 0 on success. | | * \retval 0 on success. | |
| * \retval -1 on failure. | | * \retval -1 on failure. | |
| * \ingroup BC_m | | * \ingroup BC_m | |
| */ | | */ | |
| typedef int (*blockCipherSetIV )(blockCipherParam*, const byte*); | | typedef int (*blockCipherSetIV )(blockCipherParam*, const byte*); | |
| | | | |
| | | | |
| skipping to change at line 681 | | skipping to change at line 681 | |
| */ | | */ | |
| const blockCipherRaw raw; | | const blockCipherRaw raw; | |
| /*!\var ecb | | /*!\var ecb | |
| * \brief The cipher's ECB functions. | | * \brief The cipher's ECB functions. | |
| */ | | */ | |
| const blockCipherMode ecb; | | const blockCipherMode ecb; | |
| const blockCipherMode cbc; | | const blockCipherMode cbc; | |
| /*!\var getfb | | /*!\var getfb | |
| * \brief Pointer to the cipher's feedback-returning function. | | * \brief Pointer to the cipher's feedback-returning function. | |
| */ | | */ | |
|
| const blockCipherFeedback getfb; | | const blockCipherFeedback getfb; | |
| }; | | }; | |
| | | | |
| #ifndef __cplusplus | | #ifndef __cplusplus | |
| typedef struct _blockCipher blockCipher; | | typedef struct _blockCipher blockCipher; | |
| #endif | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" { | | extern "C" { | |
| #endif | | #endif | |
| | | | |
| | | | |
| skipping to change at line 711 | | skipping to change at line 711 | |
| * \brief This function returns the \a n -th blockcipher implemented by | | * \brief This function returns the \a n -th blockcipher implemented by | |
| * the library. | | * the library. | |
| * \param n Index of the requested blockcipher; legal values are 0 | | * \param n Index of the requested blockcipher; legal values are 0 | |
| * through blockCipherCount() - 1. | | * through blockCipherCount() - 1. | |
| * \return A pointer to a blockcipher or null, if the index was out of | | * \return A pointer to a blockcipher or null, if the index was out of | |
| * range. | | * range. | |
| */ | | */ | |
| BEECRYPTAPI | | BEECRYPTAPI | |
| const blockCipher* blockCipherGet(int); | | const blockCipher* blockCipherGet(int); | |
| | | | |
|
| /*!\fn const blockCIiher* blockCipherFind(const char* name) | | /*!\fn const blockCipher* blockCipherFind(const char* name) | |
| * \brief This function returns the blockcipher specified by the given name
. | | * \brief This function returns the blockcipher specified by the given name
. | |
| * \param name Name of the requested blockcipher. | | * \param name Name of the requested blockcipher. | |
| * \return A pointer to a blockcipher or null, if the name wasn't found. | | * \return A pointer to a blockcipher or null, if the name wasn't found. | |
| */ | | */ | |
| BEECRYPTAPI | | BEECRYPTAPI | |
| const blockCipher* blockCipherFind(const char*); | | const blockCipher* blockCipherFind(const char*); | |
| | | | |
| /*!\fn const blockCipher* blockCipherDefault() | | /*!\fn const blockCipher* blockCipherDefault() | |
| * \brief This functions returns the default blockcipher; the default value | | * \brief This functions returns the default blockcipher; the default value | |
| * can be specified by setting environment variable BEECRYPT_CIPHER. | | * can be specified by setting environment variable BEECRYPT_CIPHER. | |
| | | | |
| skipping to change at line 792 | | skipping to change at line 792 | |
| | | | |
| BEECRYPTAPI | | BEECRYPTAPI | |
| int blockCipherContextFree(blockCipherContext*); | | int blockCipherContextFree(blockCipherContext*); | |
| | | | |
| BEECRYPTAPI | | BEECRYPTAPI | |
| int blockCipherContextECB(blockCipherContext*, uint32_t*, const uint32_t*,
int); | | int blockCipherContextECB(blockCipherContext*, uint32_t*, const uint32_t*,
int); | |
| | | | |
| BEECRYPTAPI | | BEECRYPTAPI | |
| int blockCipherContextCBC(blockCipherContext*, uint32_t*, const uint32_t*,
int); | | int blockCipherContextCBC(blockCipherContext*, uint32_t*, const uint32_t*,
int); | |
| | | | |
|
| | | BEECRYPTAPI | |
| | | int blockCipherContextValidKeylen(blockCipherContext*, size_t); | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 4 change blocks. |
| 3 lines changed or deleted | | 6 lines changed or added | |
|
| blowfish.h | | blowfish.h | |
| | | | |
| skipping to change at line 46 | | skipping to change at line 46 | |
| | | | |
| #include "beecrypt/beecrypt.h" | | #include "beecrypt/beecrypt.h" | |
| #include "beecrypt/blowfishopt.h" | | #include "beecrypt/blowfishopt.h" | |
| | | | |
| #define BLOWFISHROUNDS 16 | | #define BLOWFISHROUNDS 16 | |
| #define BLOWFISHPSIZE (BLOWFISHROUNDS+2) | | #define BLOWFISHPSIZE (BLOWFISHROUNDS+2) | |
| | | | |
| /*!\brief Holds all the parameters necessary for the Blowfish cipher. | | /*!\brief Holds all the parameters necessary for the Blowfish cipher. | |
| * \ingroup BC_blowfish_m | | * \ingroup BC_blowfish_m | |
| */ | | */ | |
|
| typedef struct | | #ifdef __cplusplus | |
| | | struct BEECRYPTAPI blowfishParam | |
| | | #else | |
| | | struct _blowfishParam | |
| | | #endif | |
| { | | { | |
| /*!\var p | | /*!\var p | |
| * \brief Holds the key expansion. | | * \brief Holds the key expansion. | |
| */ | | */ | |
| uint32_t p[BLOWFISHPSIZE]; | | uint32_t p[BLOWFISHPSIZE]; | |
| /*!\var s | | /*!\var s | |
| * \brief Holds the s-boxes. | | * \brief Holds the s-boxes. | |
| */ | | */ | |
| uint32_t s[1024]; | | uint32_t s[1024]; | |
| /*!\var fdback | | /*!\var fdback | |
| * \brief Buffer to be used by block chaining or feedback modes. | | * \brief Buffer to be used by block chaining or feedback modes. | |
| */ | | */ | |
| uint32_t fdback[2]; | | uint32_t fdback[2]; | |
|
| } blowfishParam; | | }; | |
| | | | |
| | | #ifndef __cplusplus | |
| | | typedef struct _blowfishParam blowfishParam; | |
| | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" { | | extern "C" { | |
| #endif | | #endif | |
| | | | |
| /*!\var blowfish | | /*!\var blowfish | |
| * \brief Holds the full API description of the Blowfish algorithm. | | * \brief Holds the full API description of the Blowfish algorithm. | |
| */ | | */ | |
| extern const BEECRYPTAPI blockCipher blowfish; | | extern const BEECRYPTAPI blockCipher blowfish; | |
| | | | |
| | | | |
End of changes. 2 change blocks. |
| 2 lines changed or deleted | | 10 lines changed or added | |
|
| dhaes.h | | dhaes.h | |
| | | | |
| skipping to change at line 39 | | skipping to change at line 39 | |
| * \author Bob Deblier <bob.deblier@pandora.be> | | * \author Bob Deblier <bob.deblier@pandora.be> | |
| * \ingroup DL_m DL_dh_m | | * \ingroup DL_m DL_dh_m | |
| */ | | */ | |
| | | | |
| #ifndef _DHAES_H | | #ifndef _DHAES_H | |
| #define _DHAES_H | | #define _DHAES_H | |
| | | | |
| #include "beecrypt/beecrypt.h" | | #include "beecrypt/beecrypt.h" | |
| #include "beecrypt/dldp.h" | | #include "beecrypt/dldp.h" | |
| | | | |
|
| typedef struct | | #ifdef __cplusplus | |
| | | struct BEECRYPTAPI dhaes_pParameters | |
| | | #else | |
| | | struct _dhaes_pParameters | |
| | | #endif | |
| { | | { | |
| const dldp_p* param; | | const dldp_p* param; | |
| const hashFunction* hash; | | const hashFunction* hash; | |
| const blockCipher* cipher; | | const blockCipher* cipher; | |
| const keyedHashFunction* mac; | | const keyedHashFunction* mac; | |
| size_t cipherkeybits; | | size_t cipherkeybits; | |
| size_t mackeybits; | | size_t mackeybits; | |
|
| } dhaes_pParameters; | | }; | |
| | | | |
|
| typedef struct | | #ifndef __cplusplus | |
| | | typedef struct _dhaes_pParameters dhaes_pParameters; | |
| | | #endif | |
| | | | |
| | | #ifdef __cplusplus | |
| | | struct BEECRYPTAPI dhaes_pContext | |
| | | #else | |
| | | struct _dhaes_pContext | |
| | | #endif | |
| { | | { | |
| dldp_p param; | | dldp_p param; | |
| mpnumber pub; | | mpnumber pub; | |
| mpnumber pri; | | mpnumber pri; | |
| hashFunctionContext hash; | | hashFunctionContext hash; | |
| blockCipherContext cipher; | | blockCipherContext cipher; | |
| keyedHashFunctionContext mac; | | keyedHashFunctionContext mac; | |
| size_t cipherkeybits; | | size_t cipherkeybits; | |
| size_t mackeybits; | | size_t mackeybits; | |
|
| } dhaes_pContext; | | }; | |
| | | | |
| | | #ifndef __cplusplus | |
| | | typedef struct _dhaes_pContext dhaes_pContext; | |
| | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" { | | extern "C" { | |
| #endif | | #endif | |
| | | | |
| BEECRYPTAPI | | BEECRYPTAPI | |
| int dhaes_pUsable(const dhaes_pParameters*); | | int dhaes_pUsable(const dhaes_pParameters*); | |
| | | | |
| BEECRYPTAPI | | BEECRYPTAPI | |
| int dhaes_pContextInit (dhaes_pContext*, const dhaes_pParameters*); | | int dhaes_pContextInit (dhaes_pContext*, const dhaes_pParameters*); | |
| | | | |
End of changes. 4 change blocks. |
| 4 lines changed or deleted | | 20 lines changed or added | |
|
| endianness.h | | endianness.h | |
| /* | | /* | |
| * endianness.h | | * endianness.h | |
| * | | * | |
| * Endian-dependant encoding/decoding, header | | * Endian-dependant encoding/decoding, header | |
| * | | * | |
|
| * Copyright (c) 1998, 1999, 2000, 2001 Virtual Unlimited B.V. | | * Copyright (c) 1998, 1999, 2000, 2001, 2004 Beeyond Software Holding | |
| * | | * | |
|
| * Author: Bob Deblier <bob@virtualunlimited.com> | | * Author: Bob Deblier <bob.deblier@telenet.be> | |
| * | | * | |
| * This library is free software; you can redistribute it and/or | | * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | | * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | | * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | | * version 2.1 of the License, or (at your option) any later version. | |
| * | | * | |
| * This library is distributed in the hope that it will be useful, | | * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | | * Lesser General Public License for more details. | |
| | | | |
| skipping to change at line 31 | | skipping to change at line 31 | |
| * License along with this library; if not, write to the Free Software | | * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US
A | | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US
A | |
| * | | * | |
| */ | | */ | |
| | | | |
| #ifndef _ENDIANNESS_H | | #ifndef _ENDIANNESS_H | |
| #define _ENDIANNESS_H | | #define _ENDIANNESS_H | |
| | | | |
| #include "beecrypt/beecrypt.h" | | #include "beecrypt/beecrypt.h" | |
| | | | |
|
| #ifdef __cplusplus | | #if defined(__cplusplus) || HAVE_INLINE | |
| inline int16_t swap16(int16_t n) | | | |
| | | static inline int16_t _swap16(int16_t n) | |
| { | | { | |
| return ( ((n & 0xff) << 8) | | | return ( ((n & 0xff) << 8) | | |
| ((n & 0xff00) >> 8) ); | | ((n & 0xff00) >> 8) ); | |
| } | | } | |
|
| | | # define swap16(n) _swap16(n) | |
| | | | |
|
| inline uint16_t swapu16(uint16_t n) | | static inline uint16_t _swapu16(uint16_t n) | |
| { | | { | |
| return ( ((n & 0xffU) << 8) | | | return ( ((n & 0xffU) << 8) | | |
| ((n & 0xff00U) >> 8) ); | | ((n & 0xff00U) >> 8) ); | |
| } | | } | |
|
| | | # define swapu16(n) _swap16(n) | |
| | | | |
|
| inline int32_t swap32(int32_t n) | | # ifdef __arch__swab32 | |
| | | # define swap32(n) __arch__swab32(n) | |
| | | # define swapu32(n) __arch__swab32(n) | |
| | | # else | |
| | | | |
| | | static inline int32_t _swap32(int32_t n) | |
| { | | { | |
| return ( ((n & 0xff) << 24) | | | return ( ((n & 0xff) << 24) | | |
| ((n & 0xff00) << 8) | | | ((n & 0xff00) << 8) | | |
| ((n & 0xff0000) >> 8) | | | ((n & 0xff0000) >> 8) | | |
| ((n & 0xff000000) >> 24) ); | | ((n & 0xff000000) >> 24) ); | |
| } | | } | |
|
| | | # define swap32(n) _swap32(n) | |
| | | | |
|
| inline uint32_t swapu32(uint32_t n) | | static inline uint32_t _swapu32(uint32_t n) | |
| { | | { | |
| return ( ((n & 0xffU) << 24) | | | return ( ((n & 0xffU) << 24) | | |
| ((n & 0xff00U) << 8) | | | ((n & 0xff00U) << 8) | | |
| ((n & 0xff0000U) >> 8) | | | ((n & 0xff0000U) >> 8) | | |
| ((n & 0xff000000U) >> 24) ); | | ((n & 0xff000000U) >> 24) ); | |
| } | | } | |
|
| | | # define swapu32(n) _swapu32(n) | |
| | | | |
|
| inline int64_t swap64(int64_t n) | | # endif | |
| | | | |
| | | # ifdef __arch__swab64 | |
| | | # define swap64(n) __arch__swab64(n) | |
| | | # define swapu64(n) __arch__swab64(n) | |
| | | # else | |
| | | | |
| | | static inline int64_t _swap64(int64_t n) | |
| { | | { | |
| return ( ((n & ((int64_t) 0xff) ) << 56) | | | return ( ((n & ((int64_t) 0xff) ) << 56) | | |
| ((n & ((int64_t) 0xff) << 8) << 40) | | | ((n & ((int64_t) 0xff) << 8) << 40) | | |
| ((n & ((int64_t) 0xff) << 16) << 24) | | | ((n & ((int64_t) 0xff) << 16) << 24) | | |
| ((n & ((int64_t) 0xff) << 24) << 8) | | | ((n & ((int64_t) 0xff) << 24) << 8) | | |
| ((n & ((int64_t) 0xff) << 32) >> 8) | | | ((n & ((int64_t) 0xff) << 32) >> 8) | | |
| ((n & ((int64_t) 0xff) << 40) >> 24) | | | ((n & ((int64_t) 0xff) << 40) >> 24) | | |
| ((n & ((int64_t) 0xff) << 48) >> 40) | | | ((n & ((int64_t) 0xff) << 48) >> 40) | | |
| ((n & ((int64_t) 0xff) << 56) >> 56) ); | | ((n & ((int64_t) 0xff) << 56) >> 56) ); | |
| } | | } | |
|
| | | # define swap64(n) _swap64(n) | |
| | | | |
| | | static inline uint64_t _swapu64(uint64_t n) | |
| | | { | |
| | | return ( ((n & ((uint64_t) 0xff) ) << 56) | | |
| | | ((n & ((uint64_t) 0xff) << 8) << 40) | | |
| | | ((n & ((uint64_t) 0xff) << 16) << 24) | | |
| | | ((n & ((uint64_t) 0xff) << 24) << 8) | | |
| | | ((n & ((uint64_t) 0xff) << 32) >> 8) | | |
| | | ((n & ((uint64_t) 0xff) << 40) >> 24) | | |
| | | ((n & ((uint64_t) 0xff) << 48) >> 40) | | |
| | | ((n & ((uint64_t) 0xff) << 56) >> 56) ); | |
| | | } | |
| | | # define swapu64(n) _swapu64(n) | |
| | | | |
| | | # endif | |
| | | | |
| #else | | #else | |
| int16_t swap16 (int16_t); | | int16_t swap16 (int16_t); | |
| uint16_t swapu16(uint16_t); | | uint16_t swapu16(uint16_t); | |
| int32_t swap32 (int32_t); | | int32_t swap32 (int32_t); | |
| uint32_t swapu32(uint32_t); | | uint32_t swapu32(uint32_t); | |
| int64_t swap64 (int64_t); | | int64_t swap64 (int64_t); | |
|
| | | uint64_t swapu64(uint64_t); | |
| #endif | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" { | | extern "C" { | |
| #endif | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| | | | |
End of changes. 13 change blocks. |
| 8 lines changed or deleted | | 43 lines changed or added | |
|
| timestamp.h | | timestamp.h | |
| | | | |
| skipping to change at line 31 | | skipping to change at line 31 | |
| * License along with this library; if not, write to the Free Software | | * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US
A | | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US
A | |
| * | | * | |
| */ | | */ | |
| | | | |
| #ifndef _TIMESTAMP_H | | #ifndef _TIMESTAMP_H | |
| #define _TIMESTAMP_H | | #define _TIMESTAMP_H | |
| | | | |
| #include "beecrypt/beecrypt.h" | | #include "beecrypt/beecrypt.h" | |
| | | | |
|
| #if HAVE_LONG_LONG | | #if HAVE_LONG_LONG && !defined(__cplusplus) /* C++ doesn't like LL constant
s */ | |
| # define ONE_SECOND 1000LL | | # define ONE_SECOND 1000LL | |
| # define ONE_MINUTE 60000LL | | # define ONE_MINUTE 60000LL | |
| # define ONE_HOUR 3600000LL | | # define ONE_HOUR 3600000LL | |
| # define ONE_DAY 86400000LL | | # define ONE_DAY 86400000LL | |
| # define ONE_WEEK 604800000LL | | # define ONE_WEEK 604800000LL | |
| # define ONE_YEAR 31536000000LL | | # define ONE_YEAR 31536000000LL | |
| #else | | #else | |
| # define ONE_SECOND 1000L | | # define ONE_SECOND 1000L | |
| # define ONE_MINUTE 60000L | | # define ONE_MINUTE 60000L | |
| # define ONE_HOUR 3600000L | | # define ONE_HOUR 3600000L | |
| | | | |
End of changes. 1 change blocks. |
| 1 lines changed or deleted | | 1 lines changed or added | |
|