+++ /dev/null
-.deps
-.depend
-.depend-done
-.libs
-Doxyfile
-Makefile
-Makefile.in
-aclocal.m4
-missing
-mkinstalldirs
-apidocs
-autom4te*
-beecrypt.gnu.h
-beecrypt.spec
-beecrypt-*.tar.gz
-config.h
-config.h.in
-config.cache
-config.guess
-config.log
-config.m4
-config.status
-config.sub
-configure
-depcomp
-doxygen
-libtool
-listobjs
-ltconfig
-ltmain.sh
-aesopt.c
-blowfishopt.c
-mpopt.c
-sha1opt.c
-*.la
-*.lcd
-*.lo
-*.o
-*.s
-stamp-h
-stamp-h1
-stamp-h.in
+++ /dev/null
--I. -I/usr/lib/gcc-lib/i386-redhat-linux/3.1/include -DHAVE_CONFIG_H -D_GNU_SOURCE -DHAVE_DEV_DSP -DHAVE_SYS_SOUNDCARD
-
-#+partial
-+forcehints
-
--warnposix
-
-+unixlib
-
--unrecogcomments # XXX ignore doxygen markings
-
-+strict # lclint level
-
-# --- in progress
-+likelybounds
--bufferoverflowhigh
-
--elseifcomplete
--whileempty
-
-# --- not-yet at strict level
--exportconst # 3
--exportfcn # 308
--exporttype # 53
--exportvar # 14
--protoparamname # 826
-
--ansi-reserved-internal # goofy
-
--ptrarith # 212
-
--mustdefine # 64
--strictops # 23
-
--impcheckedstrictglobs
--impcheckedstrictstatics
--strictbranchstate
-
--forblock # 15
--ifblock # 455
--whileblock # 25
--sys-dir-errors # 1296
-
-# --- not-yet at checks level
--predboolptr # 88
--ansi-reserved # goofy
-
-# --- not-yet at standard level
-+boolint # 329
-+charint # 3
-+matchanyintegral # 573
BeeCrypt Cryptograpy Library:
Bob Deblier <bob.deblier@pandora.be>
+
+C++ Interface:
+
+Bob Deblier <bob.deblier@pandora.be>
+
+Python Interface:
+
+Jeff Johson <jbj@redhat.com>
I've tried to make them as accurate as possible, within limits.
Note: many of the testing systems were provided by HP's testdrive program;
-many thanks to them for giving me access to their systems.
+many thanks to them for giving me access to their systems. Also thanks to
+SourceForge for their compile farm!
Note: to avoid religious wars, in the table below read GNU/Linux for
Linux - I'm just a little cramped for space...
BENCHmark Modular Exponentation (more is better):
+BeeCrypt 4.0.0 | gcc-3.3.3 | Fedora Core 2 | Athlon 64 3000+| 1 GB: 24740
+BeeCrypt 4.0.0 | gcc-3.2.2 | SuSE 8 EL | Opteron 1600 | 1 GB: 19460
BeeCrypt 3.0.0 | gcc-3.x | RedHat Linux | Opteron MP 1600 | : 17230
+BeeCrypt 3.2.0 | gcc-2.96 | RedHat AS 2.1 | Itanium 2 1400 | 1 GB: 11453
BeeCrypt 3.0.0 | gcc-3.2.2 | Debian Linux 3.0 | Itanium 2 900 | 12 GB: 7317
BeeCrypt 3.0.0 | gcc-3.3 | RedHat AS 2.1 | P4 Xeon 2400 | 4 GB: 6920 [--with-arch=pentium4]
BeeCrypt 3.0.0 | gcc-2.95.4 | Debian Linux 3.0 | Alpha EV6.7 666 | 2 GB: 5742
BENCHmark Hash Function (more is better):
MD5
+BeeCrypt 4.0.0 | gcc-3.3.3 | Fedora Core 2 | Athlon 64 3000+| 1 GB: 186.6 MB/s
BeeCrypt 3.0.0 | gcc-2.96 | RedHat AS 2.1 | P4 Xeon 2400 | 4 GB: 137.0 MB/s [--with-arch=pentiumpro]
SHA-1
+BeeCrypt 4.0.0 | gcc-3.3.3 | Fedora Core 2 | Athlon 64 3000+| 1 GB: 104.7 MB/s
BeeCrypt 3.0.0 | gcc-2.96 | RedHat AS 2.1 | P4 Xeon 2400 | 4 GB: 77.0 MB/s [--with-arch=pentiumpro]
SHA-256
- = open bug
* = fixed bug
-3.0.0pre:
- - Intel icc can't cope with gcj headers; there's also a problem in
- combination with aio.h. Solution should be to not test gcj when using
- this compiler. As a workaround, you can specify --without-javaglue.
- - GCC 3.3 produces faster output for Blowfish than the included assembler
- source; try coding two Blowfish rounds (without swap) in C and compile
- to assembler to see how GCC accomplishes this.
+3.1.0:
+ * Error in final result computation of mpextgcd_w in certain circumstances.
+ * PowerPC 64-bit assembler symbols aren't defined according to LSB 1.3.
+
+3.0.0:
+ - Can't seem to generate 64-bit shared libraries on AIX; use
+ --disable-shared on this platform for now.
+ - Intel icc can't cope with gcj headers. There's also a problem in
+ combination with aio.h; solution should be to not test gcj when using
+ this compiler. As a workaround, you can specify --without-javaglue.
+ - GCC 3.3 produces faster output for Blowfish on Pentium 4 than the
+ included assembler source; try coding two Blowfish rounds (without swap)
+ in C and compile to assembler to see how GCC accomplishes this.
2.3.0pre:
* bug in certain instances of computing modular inverse.
I would like to thank the following people (in alphabetical order):
+- Seth Arnold, for contributing to the documentation.
- Jan-Rudolph Bührmann, for helping me get started on the 64-bit multi-
precision integer library.
- Luca Filipozzi, maintainer/packager of BeeCrypt for Debian GNU/Linux.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
+necessary. Hereny it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Section\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\ No newline at end of file
+++ /dev/null
-To generate the documentation, please use doxygen.
-# Doxyfile 1.2.10
+# Doxyfile 1.3.4
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
# Values that contain spaces should be placed between quotes (" ")
#---------------------------------------------------------------------------
-# General configuration options
+# Project related configuration options
#---------------------------------------------------------------------------
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
-# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
-# German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
-# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
OUTPUT_LANGUAGE = English
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL = YES
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC = YES
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these class will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES = NO
+USE_WINDOWS_ENCODING = NO
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
# include brief member descriptions after the members that are listed in
ALWAYS_DETAILED_SEC = NO
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
-FULL_PATH_NAMES = NO
+FULL_PATH_NAMES = YES
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user defined part of the path. Stripping is
+# can be used to strip a user-defined part of the path. Stripping is
# only done if one of the specified strings matches the left-hand part of
# the path. It is allowed to use relative paths in the argument list.
STRIP_FROM_PATH = @top_srcdir@/
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
-INTERNAL_DOCS = YES
+SHORT_NAMES = NO
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a class diagram (in Html and LaTeX) for classes with base or
-# super classes. Setting the tag to NO turns the diagrams off.
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
-CLASS_DIAGRAMS = YES
+JAVADOC_AUTOBRIEF = YES
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
-SOURCE_BROWSER = YES
+MULTILINE_CPP_IS_BRIEF = NO
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
-INLINE_SOURCES = NO
+DETAILS_AT_TOP = NO
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
-STRIP_CODE_COMMENTS = YES
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = YES
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower case letters. If set to YES upper case letters are also
+# file names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
-# users are adviced to set this option to NO.
+# users are advised to set this option to NO.
CASE_SENSE_NAMES = YES
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the
# documentation. If set to YES the scope will be hidden.
HIDE_SCOPE_NAMES = NO
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = YES
-
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put list of the files that are included by a file in the documentation
+# will put a list of the files that are included by a file in the documentation
# of that file.
SHOW_INCLUDE_FILES = YES
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explict @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = YES
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# reimplements.
-
-INHERIT_DOCS = YES
-
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members.
SORT_MEMBER_DOCS = YES
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 4
-
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
GENERATE_BUGLIST = YES
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
-ALIASES =
+GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consist of for it to appear in
+# the initial value of a variable or define consists of for it to appear in
# the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely.
# The appearance of the initializer of individual variables and defines in the
MAX_INITIALIZER_LINES = 30
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C.
-# For instance some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
# at the bottom of the documentation of classes and structs. If set to YES the
# list will mention the files that were used to generate the documentation.
WARN_IF_UNDOCUMENTED = YES
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
# The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = \
- @top_srcdir@/Doxyheader \
- @top_srcdir@/
+INPUT = @top_srcdir@/Doxyheader \
+ @top_srcdir@/ \
+ @top_srcdir@/c++ \
+ @top_srcdir@/c++/crypto \
+ @top_srcdir@/c++/crypto/interfaces \
+ @top_srcdir@/c++/crypto/spec \
+ @top_srcdir@/c++/io \
+ @top_srcdir@/c++/lang \
+ @top_srcdir@/c++/provider \
+ @top_srcdir@/c++/security \
+ @top_srcdir@/c++/security/cert \
+ @top_srcdir@/c++/security/interfaces \
+ @top_srcdir@/c++/security/spec \
+ @top_srcdir@/c++/util
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
FILE_PATTERNS = *.h
EXCLUDE =
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = NO
+
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
-EXCLUDE_PATTERNS =
+EXCLUDE_PATTERNS = *config*.h
# The EXAMPLE_PATH tag can be used to specify one or more files or
# directories that contain example code fragments that are included (see
EXAMPLE_PATTERNS =
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
# The IMAGE_PATH tag can be used to specify one or more files or
# directories that contain image that are included in the documentation (see
# the \image command).
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse.
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `html' will be used as the default path.
-HTML_OUTPUT =
+HTML_OUTPUT =
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a personal HTML header for
# each generated HTML page. If it is left blank doxygen will generate a
HTML_FOOTER =
-# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet
GENERATE_HTMLHELP = NO
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output dir.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
# controls if a separate .chi index file is generated (YES) or that
# it should be included in the master .chm file (NO).
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the Html help documentation and to the tree view.
+# to the contents of the HTML help documentation and to the tree view.
TOC_EXPAND = NO
# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
# generated containing a tree-like index structure (just like the one that
# is generated for HTML Help). For this to work a browser that supports
-# JavaScript and frames is required (for instance Netscape 4.0+
-# or Internet explorer 4.0+).
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
GENERATE_TREEVIEW = NO
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `latex' will be used as the default path.
-LATEX_OUTPUT =
+LATEX_OUTPUT =
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
# LaTeX documents. This may be useful for small projects and may help to
LATEX_BATCHMODE = NO
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `man' will be used as the default path.
-MAN_OUTPUT =
+MAN_OUTPUT =
# The MAN_EXTENSION tag determines the extension that is added to
# the generated man pages (default is the subroutine's section .3)
MAN_EXTENSION =
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
# would be unable to find the correct page. The default is NO.
MAN_LINKS = NO
GENERATE_XML = NO
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# compilation will be performed. Macro expansion can be done in a controlled
# way by setting EXPAND_ONLY_PREDEF to YES.
-MACRO_EXPANSION = YES
+MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
# then the macro expansion is limited to the macros specified with the
# or name=definition (no spaces). If the definition and the = are
# omitted =1 is assumed.
-PREDEFINED =
+PREDEFINED = __cplusplus MP_WBITS=@MP_WBITS@
-# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
# Use the PREDEFINED tag if you want to use a different macro definition.
EXPAND_AS_DEFINED =
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
#---------------------------------------------------------------------------
# Configuration::addtions related to external references
#---------------------------------------------------------------------------
-# The TAGFILES tag can be used to specify one or more tagfiles.
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
TAGFILES =
ALLEXTERNALS = NO
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of `which perl').
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz, a graph visualization
# toolkit from AT&T and Lucent Bell Labs. The other options in this section
# have no effect if this option is set to NO (the default)
-HAVE_DOT = NO
+HAVE_DOT = YES
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
COLLABORATION_GRAPH = YES
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similiar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
# If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances.
INCLUDED_BY_GRAPH = YES
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
# will graphical hierarchy of all classes instead of a textual one.
GRAPHICAL_HIERARCHY = YES
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found on the path.
MAX_DOT_GRAPH_HEIGHT = 1024
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes that
+# lay further from the root node will be omitted. Note that setting this option to
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and
# arrows in the dot generated graphs.
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermedate dot files that are used to generate
+# remove the intermediate dot files that are used to generate
# the various graphs.
DOT_CLEANUP = YES
# used. If set to NO the values of all tags below this one will be ignored.
SEARCHENGINE = NO
-
-# The CGI_NAME tag should be the name of the CGI script that
-# starts the search engine (doxysearch) with the correct parameters.
-# A script with this name will be generated by doxygen.
-
-CGI_NAME =
-
-# The CGI_URL tag should be the absolute URL to the directory where the
-# cgi binaries are located. See the documentation of your http daemon for
-# details.
-
-CGI_URL =
-
-# The DOC_URL tag should be the absolute URL to the directory where the
-# documentation is located. If left blank the absolute path to the
-# documentation, with file:// prepended to it, will be used.
-
-DOC_URL =
-
-# The DOC_ABSPATH tag should be the absolute path to the directory where the
-# documentation is located. If left blank the directory on the local machine
-# will be used.
-
-DOC_ABSPATH =
-
-# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
-# is installed.
-
-BIN_ABSPATH = /usr/bin
-
-# The EXT_DOC_PATHS tag can be used to specify one or more paths to
-# documentation generated for other projects. This allows doxysearch to search
-# the documentation for these projects as well.
-
-EXT_DOC_PATHS =
BeeCrypt started its life when the need for a portable and fast cryptography
library arose at Virtual Unlimited in 1997. I'm still trying to make it
faster, easier to use and more portable, in addition to providing better
-documentation.
+documentation. The library is currently in full swing again, thanks to the
+Beeyond Software Holding BV.
BeeCrypt is released under the following license:
make sure you are legally entitled to do so.
Included in the library are:
- - entropy sources for initializing pseudo-random generators
- - pseudo-random generators
- - FIPS-186
- - Mersenne Twister
- - block ciphers
- - AES
- - Blowfish
- - hash functions
- - MD5
- - SHA-1
- - SHA-256
- - keyed hash functions (a.k.a. message authentication codes)
- - HMAC-MD5
- - HMAC-SHA-1
- - HMAC-SHA-256
- - multi-precision integer library, with assembler-optimized routines
- for a range of processors; optimized to perform well on both 32-bit
- and 64-bit machines
- - probabilistic primality testing, with optimized small prime trial
- division
- - discrete logarithm parameter generation over a prime field
- - Diffie-Hellman key agreement
- - DHAES encryption scheme
- - DSA signature scheme
- - ElGamal signature scheme (two variants)
- - RSA keypair generation with chinese remainder theorem variables
- - RSA public & private key operations
+<ul>
+ <li>entropy sources for initializing pseudo-random generators
+ <li>pseudo-random generators
+ <ul>
+ <li>FIPS-186
+ </ul>
+ <li>block ciphers
+ <ul>
+ <li>AES
+ <li>Blowfish
+ </ul>
+ <li>hash functions
+ <ul>
+ <li>MD5
+ <li>SHA-1
+ <li>SHA-256
+ </ul>
+ <li>keyed hash functions (a.k.a. message authentication codes)
+ <ul>
+ <li>HMAC-MD5
+ <li>HMAC-SHA-1
+ <li>HMAC-SHA-256
+ </ul>
+ <li>multi-precision integer library, with assembler-optimized routines
+ for a range of processors; optimized to perform well on both 32-bit
+ and 64-bit machines; uses Barrett modular reduction instead of the
+ more common usual Montgomery algorithm; also implements sliding
+ windows.
+ <li>probabilistic primality testing, with optimized small prime trial
+ division
+ <li>discrete logarithm parameter generation over a prime field
+ <li>Diffie-Hellman key agreement
+ <li>DHAES encryption scheme
+ <li>DSA signature scheme
+ <li>ElGamal signature scheme (two variants)
+ <li>RSA keypair generation with chinese remainder theorem variables
+ <li>RSA public & private key operations
+</ul>
-Planned for the near future are:
- - compliance with and compliance statements for IEEE P1363
- - more blockciphers (Twofish, ... )
- - more hash functions (RIPEMD-160, SHA-384, SHA-512, HAVAL, Tiger)
- - RSA signatures as specified by RFC-2440.
- - Elliptic Curves (ECDSA, ... )
- - more blockcipher modes (OFB, ... )
+A new feature in version 4.x is the C++ API, built to resemble Java's security
+and cryptography API. At this moment the number of classes provided is just
+enough to build CSPs. If there is enough interest, we may expand this library.
+
+Planned for the future are:
+<ul>
+ <li>compliance with and compliance statements for IEEE P1363
+ <li>more blockciphers (Twofish, ... )
+ <li>more blockcipher modes (CTR, OFB, ... )
+ <li>more hash functions (RIPEMD-160, SHA-384, SHA-512, HAVAL, Tiger)
+ <li>RSA signatures as specified by RFC-2440.
+ <li>Elliptic Curves (ECDSA, ... )
+</ul>
The library has been tested on the following platforms:
- - Linux glibc 2.x alpha
- - Linux glibc 2.x arm
- - Linux glibc 2.x ia64
- - Linux glibc 2.x m68k
- - Linux glibc 2.x ppc
- - Linux glibc 2.x s390x
- - Linux glibc 2.x sparc
- - Linux glibc 2.x x86
- - Solaris 2.[6789] sparc (with Forte or GNU compilers)
- - Solaris 2.[78] x86 (with Forte or GNU compilers)
- - Tru64 Unix alpha
- - Win32 (Windows 95, 98, NT 4.0, 2000, XP)
- - AIX (shared libraries don't seem to work in 64-bit mode)
- - Darwin (javaglue doesn't compile yet)
- - Cygwin (the DLL builds now, but needs to be tested)
+<ul>
+ <li>Darwin
+ <li>Linux glibc 2.x alpha
+ <li>Linux glibc 2.x arm
+ <li>Linux glibc 2.x ia64
+ <li>Linux glibc 2.x m68k
+ <li>Linux glibc 2.x ppc
+ <li>Linux glibc 2.x s390x
+ <li>Linux glibc 2.x sparc
+ <li>Linux glibc 2.x x86
+ <li>Linux glibc 2.x x86_64
+ <li>Solaris 2.[6789] sparc (with Forte or GNU compilers)
+ <li>Solaris 2.[78] x86 (with Forte or GNU compilers)
+ <li>Tru64 Unix alpha
+ <li>Win32 (Windows 95, 98, NT 4.0, 2000, XP)
+</ul>
+
+The library is currently in the process of being ported to:
+<ul>
+ <li>AIX (shared libraries don't seem to work in 64-bit mode)
+ <li>Cygwin (the DLL builds now, but needs to be tested)
+</ul>
The structures in the library are geared towards exchange with Java
and its security and cryptography classes. This library can also be
*/
-/*! \defgroup ES_m Entropy sources
+/*!\defgroup ES_m Entropy sources
+ */
+/*!\defgroup ES_audio_m Entropy sources: /dev/audio
+ */
+/*!\defgroup ES_dsp_m Entropy sources: /dev/dsp
+ */
+/*!\defgroup ES_random_m Entropy sources: /dev/random
+ */
+/*!\defgroup ES_urandom_m Entropy sources: /dev/urandom
+ */
+/*!\defgroup ES_tty_m Entropy sources: /dev/tty
+ */
+/*!\defgroup PRNG_m Pseudo-Random Number Generators
+ */
+/*!\defgroup PRNG_fips186_m Pseudo-Random Number Generators: FIPS-186
+ */
+/*!\defgroup PRNG_mt_m Pseudo-Random Number Generators: Mersenne Twister
+ */
+/*!\defgroup HASH_m Hash Functions
+ */
+/*!\defgroup HASH_md5_m Hash Functions: MD5
+ */
+/*!\defgroup HASH_sha1_m Hash Functions: SHA-1
+ */
+/*!\defgroup HASH_sha256_m Hash Functions: SHA-256
+ */
+/*!\defgroup HMAC_m Keyed Hash Functions, a.k.a. Message Authentication Codes
+ */
+/*!\defgroup HMAC_md5_m Keyed Hash Functions: HMAC-MD5
*/
-/*! \defgroup ES_audio_m Entropy sources: /dev/audio
+/*!\defgroup HMAC_sha1_m Keyed Hash Functions: HMAC-SHA-1
*/
-/*! \defgroup ES_dsp_m Entropy sources: /dev/dsp
+/*!\defgroup HMAC_sha256_m Keyed Hash Functions: HMAC-SHA-256
*/
-/*! \defgroup ES_random_m Entropy sources: /dev/random
+/*!\defgroup BC_m Block ciphers
*/
-/*! \defgroup ES_urandom_m Entropy sources: /dev/urandom
+/*!\defgroup BC_aes_m Block ciphers: AES
*/
-/*! \defgroup ES_tty_m Entropy sources: /dev/tty
+/*!\defgroup BC_blowfish_m Block ciphers: Blowfish
*/
-/*! \defgroup PRNG_m Pseudo-Random Number Generators
+/*!\defgroup MP_m Multiple Precision Integer Arithmetic
*/
-/*! \defgroup PRNG_fips186_m Pseudo-Random Number Generators: FIPS-186
+/*!\defgroup DL_m Discrete Logarithm Primitives
*/
-/*! \defgroup PRNG_mt_m Pseudo-Random Number Generators: Mersenne Twister
+/*!\defgroup DL_dh_m Discrete Logarithm Primitives: Diffie-Hellman
*/
-/*! \defgroup HASH_m Hash Functions
+/*!\defgroup DL_dsa_m Discrete Logarithm Primitives: DSA
*/
-/*! \defgroup HASH_md5_m Hash Functions: MD5
+/*!\defgroup DL_elgamal_m Discrete Logarithm Primitives: ElGamal
*/
-/*! \defgroup HASH_sha1_m Hash Functions: SHA-1
+/*!\defgroup IF_m Integer Factorization Primitives
*/
-/*! \defgroup HASH_sha256_m Hash Functions: SHA-256
+/*!\defgroup IF_rsa_m Integer Factorization Primitives: RSA
*/
-/*! \defgroup HMAC_m Keyed Hash Functions, a.k.a. Message Authentication Codes
+/*!\defgroup PKCS1_m PKCS#1
*/
-/*! \defgroup HMAC_md5_m Keyed Hash Functions: HMAC-MD5
+/*!\defgroup PKCS12_m PKCS#12
*/
-/*! \defgroup HMAC_sha1_m Keyed Hash Functions: HMAC-SHA-1
+/*!\defgroup CXX_m C++ API
*/
-/*! \defgroup HMAC_sha256_m Keyed Hash Functions: HMAC-SHA-256
+/*!\defgroup CXX_CRYPTO_m C++ classes mimicking javax.crypto
*/
-/*! \defgroup BC_m Block ciphers
+/*!\defgroup CXX_CRYPTO_INTERFACES_m C++ classes mimicking javax.crypto.interfaces
*/
-/*! \defgroup BC_aes_m Block ciphers: AES
+/*!\defgroup CXX_CRYPTO_SPEC_m C++ classes mimicking javax.crypto.spec
*/
-/*! \defgroup BC_blowfish_m Block ciphers: Blowfish
+/*!\defgroup CXX_IO_m C++ classes mimicking java.io
*/
-/*! \defgroup MP_m Multiple Precision Integer Arithmetic
+/*!\defgroup CXX_LANG_m C++ classes mimicking java.lang
*/
-/*! \defgroup DL_m Discrete Logarithm Primitives
+/*!\defgroup CXX_PROV_m C++ Base Cryptographic Service Provider
*/
-/*! \defgroup DL_dh_m Discrete Logarithm Primitives: Diffie-Hellman
+/*!\defgroup CXX_SECURITY_m C++ classes mimicking java.security
*/
-/*! \defgroup DL_dsa_m Discrete Logarithm Primitives: DSA
+/*!\defgroup CXX_SECURITY_CERT_m C++ classes mimicking java.security.cert
*/
-/*! \defgroup DL_elgamal_m Discrete Logarithm Primitives: ElGamal
+/*!\defgroup CXX_SECURITY_INTERFACES_m C++ classes mimicking java.security.interfaces
*/
-/*! \defgroup IF_m Integer Factorization Primitives
+/*!\defgroup CXX_SECURITY_SPEC_m C++ classes mimicking java.security.spec
*/
-/*! \defgroup IF_rsa_m Integer Factorization Primitives: RSA
+/*!\defgroup CXX_UTIL_m C++ classes mimicking java.util
*/
-/*! \defgroup JAVA_m Java API
+/*!\defgroup JAVA_m Java API
*/
-/*! \defgroup UNIT_m Unit tests
+/*!\defgroup UNIT_m Unit tests
*/
-/*! \defgroup BENCH_m Benchmark tests
+/*!\defgroup BENCH_m Benchmark tests
*/
# 3. Interfaces removed (bad): Increment CURRENT, set AGE and REVISION to 0.
#
-LIBBEECRYPT_LT_CURRENT = 6
-LIBBEECRYPT_LT_AGE = 0
+LIBBEECRYPT_LT_CURRENT = 8
+LIBBEECRYPT_LT_AGE = 2
LIBBEECRYPT_LT_REVISION = 0
AUTOMAKE_OPTIONS = gnu check-news no-dependencies
-LINT = splint
-
-SUBDIRS = . docs gas masm tests $(MAYBE_OPT)
+SUBDIRS = . $(MAYBE_SUB) tests docs gas masm
SUFFIXES = .s
+INCLUDES = -I$(top_srcdir)/..
+
.s.lo:
$(LTCOMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
-BEECRYPT_OBJECTS = aes.lo aesopt.lo base64.lo beecrypt.lo blockmode.lo blockpad.lo blowfish.lo blowfishopt.lo dhaes.lo dldp.lo dlkp.lo dlpk.lo dlsvdp-dh.lo dsa.lo elgamal.lo endianness.lo entropy.lo fips186.lo hmac.lo hmacmd5.lo hmacsha1.lo hmacsha256.lo md5.lo memchunk.lo mp.lo mpbarrett.lo mpnumber.lo mpopt.lo mpprime.lo mtprng.lo rsa.lo rsakp.lo rsapk.lo sha1.lo sha1opt.lo sha256.lo timestamp.lo
+BEECRYPT_OBJECTS = aes.lo aesopt.lo base64.lo beecrypt.lo blockmode.lo blockpad.lo blowfish.lo blowfishopt.lo dhaes.lo dldp.lo dlkp.lo dlpk.lo dlsvdp-dh.lo dsa.lo elgamal.lo endianness.lo entropy.lo fips186.lo hmac.lo hmacmd5.lo hmacsha1.lo hmacsha256.lo md5.lo memchunk.lo mp.lo mpopt.lo mpbarrett.lo mpnumber.lo mpprime.lo mtprng.lo pkcs1.lo pkcs12.lo rsa.lo rsakp.lo rsapk.lo sha1.lo sha1opt.lo sha256.lo timestamp.lo
-libaltdir = $(libdir)@LIBALT@
+libaltdir=$(prefix)/lib@LIBALT@
libalt_LTLIBRARIES = libbeecrypt.la
-libbeecrypt_la_SOURCES = aes.c base64.c beecrypt.c blockmode.c blockpad.c blowfish.c dhaes.c dldp.c dlkp.c dlpk.c dlsvdp-dh.c dsa.c elgamal.c endianness.c entropy.c fips186.c hmac.c hmacmd5.c hmacsha1.c hmacsha256.c md5.c memchunk.c mp.c mpbarrett.c mpnumber.c mpprime.c mtprng.c rsa.c rsakp.c rsapk.c sha1.c sha256.c timestamp.c
-
+libbeecrypt_la_SOURCES = aes.c base64.c beecrypt.c blockmode.c blockpad.c blowfish.c dhaes.c dldp.c dlkp.c dlpk.c dlsvdp-dh.c dsa.c elgamal.c endianness.c entropy.c fips186.c hmac.c hmacmd5.c hmacsha1.c hmacsha256.c md5.c memchunk.c mp.c mpbarrett.c mpnumber.c mpprime.c mtprng.c pkcs1.c pkcs12.c rsa.c rsakp.c rsapk.c sha1.c sha256.c timestamp.c cppglue.cxx
libbeecrypt_la_DEPENDENCIES = $(BEECRYPT_OBJECTS)
-
libbeecrypt_la_LIBADD = aesopt.lo blowfishopt.lo mpopt.lo sha1opt.lo
-
libbeecrypt_la_LDFLAGS = -no-undefined -version-info $(LIBBEECRYPT_LT_CURRENT):$(LIBBEECRYPT_LT_REVISION):$(LIBBEECRYPT_LT_AGE)
-pkginclude_HEADERS = aes.h base64.h beecrypt.h beecrypt.api.h beecrypt.gnu.h blockmode.h blockpad.h blowfish.h dhaes.h dldp.h dlkp.h dlpk.h dlsvdp-dh.h dsa.h elgamal.h endianness.h entropy.h fips186.h hmac.h hmacmd5.h hmacsha1.h hmacsha256.h md5.h memchunk.h mp.h mpbarrett.h mpnumber.h mpprime.h mtprng.h rsa.h rsakp.h rsapk.h sha1.h sha256.h timestamp.h
+pkginclude_HEADERS = aes.h aesopt.h api.h base64.h beecrypt.h blockmode.h blockpad.h blowfish.h blowfishopt.h dhaes.h dldp.h dlkp.h dlpk.h dlsvdp-dh.h dsa.h elgamal.h endianness.h entropy.h fips186.h gnu.h hmac.h hmacmd5.h hmacsha1.h hmacsha256.h md5.h memchunk.h mp.h mpbarrett.h mpnumber.h mpopt.h mpprime.h mtprng.h pkcs1.h pkcs12.h rsa.h rsakp.h rsapk.h sha1.h sha1opt.h sha256.h timestamp.h win.h
-noinst_HEADERS = aes_be.h aes_le.h aesopt.h beecrypt.win.h \
- blowfishopt.h debug.h mpopt.h sha1opt.h system.h
+noinst_HEADERS = aes_be.h aes_le.h
-EXTRA_DIST = BENCHMARKS BUGS CONTRIBUTORS Doxyfile.in Doxyheader README README.DLL README.WIN32 beecrypt.gnu.h.in beecrypt.rc beecrypt.spec autogen.sh Makefile.mak
+EXTRA_DIST = BENCHMARKS BUGS CONTRIBUTORS README.DLL README.WIN32 Doxyheader beecrypt.rc autogen.sh Makefile.mak
DISTCLEANFILES = mpopt.s aesopt.s blowfishopt.s sha1opt.s
bench:
(cd tests && $(MAKE) $(AM_MAKEFLAGS) bench)
-
-.PHONY: beetest
-beetest: all
- ${MAKE} -C tests beetest
- ./tests/beetest
-
-beecrypt.lcd: Makefile.am ${libbeecrypt_la_SOURCES} ${pkginclude_HEADERS} ${noinst_HEADERS}
- lclint $(DEFS) $(INCLUDES) ${libbeecrypt_la_SOURCES} -dump $@
-
-# XXX don't bite into gcj java dependencies (yet)
-.PHONY: sources
-sources:
- @echo $(libbeecrypt_la_SOURCES:%=beecrypt/%) | sed -e 's,beecrypt/javaglue.c,,'
-
-# XXX don't bite into javaglue.c (yet)
-.PHONY: lint
-lint:
- $(LINT) $(DEFS) $(INCLUDES) $(libbeecrypt_la_SOURCES:javaglue.c=) tests/beetest.c
-
-.PHONY: listobjs
-listobjs:
- @echo $(BEECRYPT_OBJECTS) > $@
-
-DOXYGEN = /usr/bin/doxygen
-.PHONY: doxygen
-doxygen apidocs: Doxyfile Doxyheader
- rm -rf $@
- mkdir -p $@
- - [ -x ${DOXYGEN} ] && ${DOXYGEN}
-3.0.0pre:
+4.0.0:
+ - Added a C++ API interface, modeled after Java's security & crypto API.
+ - Added the new GNU noexecstack feature.
+ - Added more x86_64 and s390x assembler routines.
+ - Modified i2osp, so that it only requires as many octets as there are
+ significant bytes in the multi-precision integers.
+ - Fixed a bug in the creation of rsa keypairs; code was not correctly
+ migrated to new calling sequence. The code now implements the method
+ described in IEEE P.1363.
+ - Fixed another bug in mpextgcd_w which sometimes returned incorrect
+ results.
+ - Fixed a bug in mprshiftlsz, which didn't work correctly when size = 1.
+ - Fixed a configuration problem on Tru64 Unix.
+
+3.1.0:
+ - Added wiping of private key components of keypairs before freeing.
+ - Fixed bug in mpextgcd_w which sometimes returned incorrect result.
+ - Fixed error in PowerPC 64-bit assembler symbol definitions.
+
+3.0.0:
- Cleaned up installed header files.
- Modified the API so that all keys can be passed as arrays of bytes.
- Modified the API so that all key sizes are given in bits.
- Added multi-precision integer assembler routines for PowerPC 64-bit.
- Added multi-precision integer assembler routines for Alpha.
- Added multi-precision integer assembler routines for Opteron.
+ - Added multi-precision integer assembler routines for IBM zSeries 64-bit.
- Added multi-precision integer assembler routines for M68K.
+ - Added Jeff Johnson's python bindings.
+ - Added new unit tests.
- Added new benchmarking programs.
2.3.0pre:
The library has been tested on the following platforms:
- AIX 5.1 ppc
- AIX 5.1 ppc64
+ - Darwin 6.5 (a.k.a. MacOS X 10.2)
- FreeBSD 4.0 alpha
- FreeBSD 4.0, 4.2 x86
- Linux glibc 2.x alpha
- Win32 (Windows 95, 98, NT 4.0, 2000, XP)
The library is currently in the process of being ported to:
- - Darwin (apparently Apple has decided to change the PPC assembler format;
- this will need a fix)
- Cygwin (Can't seem to get the DLL to build properly with the current
version of the autotools)
- HP/UX is a pain in the backside; I'll try getting it working, but the
If you want to report bugs, make suggestions, contribute fixes or
enhancements, please see the beecrypt-specific website:
-http://beecrypt.virtualunlimited.com/
+http://sourceforge.net/projects/beecrypt
or contact me at mailto:bob.deblier@pandora.be
dnl LGPL
+dnl BEECRYPT_WITH_CPU
+AC_DEFUN([BEECRYPT_WITH_CPU],[
+ ac_with_cpu=yes
+ bc_target_cpu=$withval
+ case $target_cpu in
+ i[[3456]]86)
+ case $withval in
+ i[[3456]]86 | \
+ pentium | pentium-mmx | pentiumpro | pentium[[234]] | \
+ athlon | athlon-tbird | athlon-4 | athlon-xp | athlon-mp)
+ ;;
+ *)
+ AC_MSG_WARN([invalid cpu type])
+ bc_target_cpu=$target_cpu
+ ;;
+ esac
+ ;;
+ powerpc | powerpc64)
+ case $withval in
+ 403 | 505 | \
+ 60[[1234]] | 60[[34]]e | 6[[23]]0 | \
+ 7[[45]]0 | 74[[05]]0 | \
+ 801 | 82[[13]] | 860 | \
+ power | power2 | powerpc | powerpc64)
+ ;;
+ *)
+ AC_MSG_WARN([invalid cpu type])
+ bc_target_cpu=$target_cpu
+ ;;
+ esac
+ ;;
+ sparc | sparc64)
+ case $withval in
+ sparcv8 | sparcv8plus | sparcv8plus[[ab]] | sparcv9 | sparcv9[[ab]])
+ ;;
+ *)
+ AC_MSG_WARN([invalid cpu type])
+ bc_target_cpu=$target_cpu
+ ;;
+ esac
+ ;;
+ x86) # QNX Neutrino doesn't list the exact cpu type
+ case $withval in
+ i[[3456]]86)
+ ;;
+ *)
+ AC_MSG_WARN([unsupported or invalid cpu type])
+ bc_target_cpu=$target_cpu
+ ;;
+ esac
+ ;;
+ *)
+ AC_MSG_WARN([unsupported or invalid cpu type])
+ bc_target_cpu=$target_cpu
+ ;;
+ esac
+ ])
+
+dnl BEECRYPT_WITHOUT_CPU
+AC_DEFUN([BEECRYPT_WITHOUT_CPU],[
+ ac_with_cpu=no
+ bc_target_cpu=$target_cpu
+ ])
+
+
+dnl BEECRYPT_WITH_ARCH
+AC_DEFUN([BEECRYPT_WITH_ARCH],[
+ ac_with_arch=yes
+ bc_target_arch=$withval
+ case $target_cpu in
+ i[[3456]]86)
+ case $withval in
+ i[[3456]]86 | \
+ pentium | pentium-mmx | pentiumpro | pentium[[234]] | \
+ athlon | athlon-tbird | athlon-4 | athlon-xp | athlon-mp)
+ if test "$ac_with_cpu" != yes; then
+ bc_target_cpu=$withval
+ fi
+ ;;
+ esac
+ ;;
+ powerpc*)
+ case $withval in
+ powerpc)
+ ;;
+ powerpc64)
+ bc_target_arch=powerpc64
+ ;;
+ *)
+ AC_MSG_WARN([unsupported on invalid arch type])
+ bc_target_arch=powerpc
+ ;;
+ esac
+ ;;
+ esac
+ ])
+
+dnl BEECRYPT_WITHOUT_ARCH
+AC_DEFUN([BEECRYPT_WITHOUT_ARCH],[
+ ac_with_arch=no
+ case $target_cpu in
+ alpha*)
+ bc_target_arch=alpha
+ ;;
+ arm*)
+ bc_target_arch=arm
+ ;;
+ i[[3456]]86)
+ bc_target_arch=i386
+ ;;
+ ia64)
+ bc_target_arch=ia64
+ ;;
+ m68k)
+ bc_target_arch=m68k
+ ;;
+ powerpc)
+ bc_target_arch=powerpc
+ ;;
+ powerpc64)
+ bc_target_arch=powerpc64
+ ;;
+ s390x)
+ bc_target_arch=s390x
+ ;;
+ sparc*)
+ bc_target_arch=sparc
+ ;;
+ x86_64)
+ bc_target_arch=x86_64
+ ;;
+ esac
+ ])
+
+
dnl BEECRYPT_INT_TYPES
-AC_DEFUN(BEECRYPT_INT_TYPES,[
+AC_DEFUN([BEECRYPT_INT_TYPES],[
AC_TYPE_SIZE_T
bc_typedef_size_t=
if test $ac_cv_type_size_t != yes; then
dnl BEECRYPT_CPU_BITS
-AC_DEFUN(BEECRYPT_CPU_BITS,[
+AC_DEFUN([BEECRYPT_CPU_BITS],[
AC_CHECK_SIZEOF([unsigned long])
if test $ac_cv_sizeof_unsigned_long -eq 8; then
AC_SUBST(MP_WBITS,64U)
dnl BEECRYPT_WORKING_AIO
-AC_DEFUN(BEECRYPT_WORKING_AIO,[
+AC_DEFUN([BEECRYPT_WORKING_AIO],[
AC_CHECK_HEADERS(aio.h)
if test "$ac_cv_header_aio_h" = yes; then
AC_SEARCH_LIBS([aio_read],[c rt aio posix4],[
case $target_os in
linux* | solaris*)
bc_cv_working_aio=yes ;;
- *)
+ *)
bc_cv_working_aio=no ;;
esac
])
dnl BEECRYPT_CFLAGS_REM
-AC_DEFUN(BEECRYPT_CFLAGS_REM,[
+AC_DEFUN([BEECRYPT_CFLAGS_REM],[
if test "$CFLAGS" != ""; then
CFLAGS_save=""
for flag in $CFLAGS
])
+dnl BEECRYPT_CXXFLAGS_REM
+AC_DEFUN([BEECRYPT_CXXFLAGS_REM],[
+ if test "$CXXFLAGS" != ""; then
+ CXXFLAGS_save=""
+ for flag in $CXXFLAGS
+ do
+ if test "$flag" != "$1"; then
+ CXXFLAGS_save="$CXXFLAGS_save $flag"
+ fi
+ done
+ CXXFLAGS="$CXXFLAGS_save"
+ fi
+ ])
+
+
dnl BEECRYPT_GNU_CC
-AC_DEFUN(BEECRYPT_GNU_CC,[
+AC_DEFUN([BEECRYPT_GNU_CC],[
AC_REQUIRE([AC_PROG_CC])
case $bc_target_arch in
ia64)
case $target_os in
aix*)
CC="$CC -maix64"
- LDFLAGS="$LDFLAGS -b64"
;;
esac
;;
CPPFLAGS="$CPPFLAGS -pthread"
LDFLAGS="$LDFLAGS -pthread"
;;
+ osf*)
+ CFLAGS="$CFLAGS -pthread"
+ CPPFLAGS="$CPPFLAGS -pthread"
+ ;;
esac
fi
if test "$ac_enable_debug" = yes; then
BEECRYPT_CFLAGS_REM([-g])
BEECRYPT_CFLAGS_REM([-O2])
CFLAGS="$CFLAGS -O3 -fomit-frame-pointer"
- case $bc_target_cpu in
- athlon*)
- CFLAGS="$CFLAGS -mcpu=pentiumpro";
- ;;
- i586)
- CFLAGS="$CFLAGS -mcpu=pentium"
- ;;
- i686)
- CFLAGS="$CFLAGS -mcpu=pentiumpro"
- ;;
- ia64)
- # no -mcpu=... option on ia64
- ;;
- pentium*)
- CFLAGS="$CFLAGS -mcpu=$bc_target_arch"
+ if test "$bc_cv_c_aggressive_opt" = yes; then
+ case $bc_target_cpu in
+ athlon*)
+ CFLAGS="$CFLAGS -mcpu=pentiumpro";
+ ;;
+ i586)
+ CFLAGS="$CFLAGS -mcpu=pentium"
+ ;;
+ i686)
+ CFLAGS="$CFLAGS -mcpu=pentiumpro"
+ ;;
+ ia64)
+ # no -mcpu=... option on ia64
+ ;;
+ pentium*)
+ CFLAGS="$CFLAGS -mcpu=$bc_target_arch"
+ ;;
+ esac
+ # Architecture-specific optimizations
+ case $bc_target_arch in
+ athlon*)
+ CFLAGS="$CFLAGS -march=$bc_target_arch"
+ ;;
+ i586)
+ CFLAGS="$CFLAGS -march=pentium"
+ ;;
+ i686)
+ CFLAGS="$CFLAGS -march=pentiumpro"
+ ;;
+ pentium*)
+ CFLAGS="$CFLAGS -march=$bc_target_arch"
+ ;;
+ powerpc | powerpc64)
+ CFLAGS="$CFLAGS -mcpu=$bc_target_arch"
+ ;;
+ sparcv8)
+ CFLAGS="$CFLAGS -mv8"
+ ;;
+ sparcv8plus)
+ CFLAGS="$CFLAGS -mv8plus"
+ ;;
+ esac
+ fi
+ fi
+ ])
+
+
+dnl BEECRYPT_GNU_CXX
+AC_DEFUN([BEECRYPT_GNU_CXX],[
+ AC_REQUIRE([AC_PROG_CXX])
+ case $bc_target_arch in
+ ia64)
+ case $target_os in
+ # HP/UX on Itanium needs to be told that a long is 64-bit!
+ hpux*)
+ CXXFLAGS="$CXXFLAGS -mlp64"
;;
esac
- # Architecture-specific optimizations
- case $bc_target_arch in
- athlon*)
- CFLAGS="$CFLAGS -march=$bc_target_arch"
- ;;
- i586)
- CFLAGS="$CFLAGS -march=pentium"
- ;;
- i686)
- CFLAGS="$CFLAGS -march=pentiumpro"
- ;;
- pentium*)
- CFLAGS="$CFLAGS -march=$bc_target_arch"
- ;;
- powerpc)
- CFLAGS="$CFLAGS -mcpu=powerpc"
- ;;
- powerpc64)
- CFLAGS="$CFLAGS -mcpu=powerpc64"
+ ;;
+ # PowerPC needs a signed char
+ powerpc)
+ CXXFLAGS="$CXXFLAGS -fsigned-char"
+ ;;
+ powerpc64)
+ CXXFLAGS="$CXXFLAGS -fsigned-char"
+ case $target_os in
+ aix*)
+ CXX="$CXX -maix64"
;;
- sparcv8)
- CFLAGS="$CFLAGS -mv8"
+ esac
+ ;;
+ esac
+ # Certain platforms needs special flags for multi-threaded code
+ if test "$ac_enable_threads" = yes; then
+ case $target_os in
+ freebsd*)
+ CXXFLAGS="$CXXFLAGS -pthread"
+ CXXCPPFLAGS="$CXXCPPFLAGS -pthread"
+ LDFLAGS="$LDFLAGS -pthread"
;;
- sparcv8plus)
- CFLAGS="$CFLAGS -mv8plus"
+ osf*)
+ CXXFLAGS="$CXXFLAGS -pthread"
+ CXXCPPFLAGS="$CXXCPPFLAGS -pthread"
;;
esac
fi
+ if test "$ac_enable_debug" = yes; then
+ BEECRYPT_CXXFLAGS_REM([-O2])
+ CXXFLAGS="$CXXFLAGS -Wall -pedantic"
+ else
+ # Generic optimizations, including cpu tuning
+ BEECRYPT_CXXFLAGS_REM([-g])
+ if test "$bc_cv_c_aggressive_opt" = yes; then
+ case $bc_target_cpu in
+ athlon*)
+ CXXFLAGS="$CXXFLAGS -mcpu=pentiumpro";
+ ;;
+ i586)
+ CXXFLAGS="$CXXFLAGS -mcpu=pentium"
+ ;;
+ i686)
+ CXXFLAGS="$CXXFLAGS -mcpu=pentiumpro"
+ ;;
+ ia64)
+ # no -mcpu=... option on ia64
+ ;;
+ pentium*)
+ CXXFLAGS="$CXXFLAGS -mcpu=$bc_target_arch"
+ ;;
+ esac
+ # Architecture-specific optimizations
+ case $bc_target_arch in
+ athlon*)
+ CXXFLAGS="$CXXFLAGS -march=$bc_target_arch"
+ ;;
+ i586)
+ CXXFLAGS="$CXXFLAGS -march=pentium"
+ ;;
+ i686)
+ CXXFLAGS="$CXXFLAGS -march=pentiumpro"
+ ;;
+ pentium*)
+ CXXFLAGS="$CXXFLAGS -march=$bc_target_arch"
+ ;;
+ powerpc | powerpc64)
+ CXXFLAGS="$CXXFLAGS -mcpu=$bc_target_arch"
+ ;;
+ sparcv8)
+ CXXFLAGS="$CXXFLAGS -mv8"
+ ;;
+ sparcv8plus)
+ CXXFLAGS="$CXXFLAGS -mv8plus"
+ ;;
+ esac
+ fi
+ fi
])
dnl BEECRYPT_COMPAQ_CC
-AC_DEFUN(BEECRYPT_COMPAQ_CC,[
+AC_DEFUN([BEECRYPT_COMPAQ_CC],[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_CPP])
AC_CACHE_CHECK([whether we are using Compaq's C compiler],bc_cv_prog_COMPAQ_CC,[
fi
if test "$ac_enable_debug" != yes; then
BEECRYPT_CFLAGS_REM([-g])
- CFLAGS="$CFLAGS -fast"
+ if test "$bc_cv_c_aggressive_opt" = yes; then
+ CFLAGS="$CFLAGS -fast"
+ fi
fi
fi
])
+dnl BEECRYPT_COMPAQ_CXX
+AC_DEFUN([BEECRYPT_COMPAQ_CXX],[
+ ])
+
+
dnl BEECRYPT_HPUX_CC
-AC_DEFUN(BEECRYPT_HPUX_CC,[
+AC_DEFUN([BEECRYPT_HPUX_CC],[
if test "$ac_enable_debug" != yes; then
BEECRYPT_CFLAGS_REM([-g])
- CFLAGS="$CFLAGS -fast"
+ if test "$bc_cv_c_aggressive_opt" = yes; then
+ CFLAGS="$CFLAGS -fast"
+ fi
fi
])
+dnl BEECRYPT_HP_CXX
+AC_DEFUN([BEECRYPT_HP_CXX],[
+ ])
+
+
dnl BEECRYPT_IBM_CC
-AC_DEFUN(BEECRYPT_IBM_CC,[
+AC_DEFUN([BEECRYPT_IBM_CC],[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_CPP])
AC_CACHE_CHECK([whether we are using IBM C],bc_cv_prog_IBM_CC,[
esac
if test "$ac_enable_debug" != yes; then
BEECRYPT_CFLAGS_REM([-g])
- if test "$ac_with_arch" = yes; then
- CFLAGS="$CFLAGS -O5"
- else
- CFLAGS="$CFLAGS -O3"
+ if test "$bc_cv_c_aggressive_opt" = yes; then
+ if test "$ac_with_arch" = yes; then
+ CFLAGS="$CFLAGS -O5"
+ else
+ CFLAGS="$CFLAGS -O3"
+ fi
fi
fi
# Version 5.0 doesn't have this, but 6.0 does
])
+dnl BEECRYPT_IBM_CXX
+AC_DEFUN([BEECRYPT_IBM_CXX],[
+ ])
+
+
dnl BEECRYPT_INTEL_CC
-AC_DEFUN(BEECRYPT_INTEL_CC,[
+AC_DEFUN([BEECRYPT_INTEL_CC],[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_CPP])
AC_CACHE_CHECK([whether we are using Intel C++],bc_cv_prog_INTEL_CC,[
if test "$bc_cv_prog_INTEL_CC" = yes; then
if test "$ac_enable_debug" != yes; then
BEECRYPT_CFLAGS_REM([-g])
- CFLAGS="$CFLAGS -O3"
- case $bc_target_cpu in
- i586 | pentium | pentium-mmx)
- CFLAGS="$CFLAGS -mcpu=pentium"
- ;;
- i686 | pentiumpro | pentium[[23]])
- CFLAGS="$CFLAGS -mcpu=pentiumpro"
- ;;
- pentium4)
- CFLAGS="$CFLAGS -mcpu=pentium4"
- ;;
- esac
- case $bc_target_arch in
- i586 | pentium | pentium-mmx)
- CFLAGS="$CFLAGS -tpp5"
- ;;
- i686 | pentiumpro)
- CFLAGS="$CFLAGS -tpp6 -march=pentiumpro"
- ;;
- pentium2)
- CFLAGS="$CFLAGS -tpp6 -march=pentiumii"
- ;;
- pentium3)
- CFLAGS="$CFLAGS -tpp6 -march=pentiumiii"
- ;;
- pentium4)
- CFLAGS="$CFLAGS -tpp7 -march=pentium4"
- ;;
- esac
+ if test "$bc_cv_c_aggressive_opt" = yes; then
+ case $bc_target_cpu in
+ i586 | pentium | pentium-mmx)
+ CFLAGS="$CFLAGS -mcpu=pentium"
+ ;;
+ i686 | pentiumpro | pentium[[23]])
+ CFLAGS="$CFLAGS -mcpu=pentiumpro"
+ ;;
+ pentium4)
+ CFLAGS="$CFLAGS -mcpu=pentium4"
+ ;;
+ esac
+ case $bc_target_arch in
+ i586 | pentium | pentium-mmx)
+ CFLAGS="$CFLAGS -tpp5"
+ ;;
+ i686 | pentiumpro)
+ CFLAGS="$CFLAGS -tpp6 -march=pentiumpro"
+ ;;
+ pentium2)
+ CFLAGS="$CFLAGS -tpp6 -march=pentiumii"
+ ;;
+ pentium3)
+ CFLAGS="$CFLAGS -tpp6 -march=pentiumiii"
+ ;;
+ pentium4)
+ CFLAGS="$CFLAGS -tpp7 -march=pentium4"
+ ;;
+ esac
+ fi
fi
AC_CHECK_FUNC([_rotl])
AC_CHECK_FUNC([_rotr])
])
+dnl BEECRYPT_INTEL_CXX
+AC_DEFUN([BEECRYPT_INTEL_CXX],[
+ ])
+
+
dnl BEECRYPT_SUN_FORTE_CC
-AC_DEFUN(BEECRYPT_SUN_FORTE_CC,[
+AC_DEFUN([BEECRYPT_SUN_FORTE_CC],[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_CPP])
AC_CACHE_CHECK([whether we are using Sun Forte C],bc_cv_prog_SUN_FORTE_CC,[
fi
if test "$ac_enable_debug" != yes; then
BEECRYPT_CFLAGS_REM([-g])
- CFLAGS="$CFLAGS -fast"
- case $bc_target_arch in
- sparc)
- CFLAGS="$CFLAGS -xtarget=generic -xarch=generic"
- ;;
- sparcv8)
- CFLAGS="$CFLAGS -xtarget=generic -xarch=v8"
- ;;
- sparcv8plus*)
- CFLAGS="$CFLAGS -xtarget=generic -xarch=v8plus"
- ;;
- sparcv9*)
- CFLAGS="$CFLAGS -xtarget=generic64 -xarch=v9"
- ;;
- esac
+ if test "$bc_cv_c_aggressive_opt" = yes; then
+ CFLAGS="$CFLAGS -fast"
+ case $bc_target_arch in
+ sparc)
+ CFLAGS="$CFLAGS -xtarget=generic -xarch=generic"
+ ;;
+ sparcv8)
+ CFLAGS="$CFLAGS -xtarget=generic -xarch=v8"
+ ;;
+ sparcv8plus*)
+ CFLAGS="$CFLAGS -xtarget=generic -xarch=v8plus"
+ ;;
+ sparcv9*)
+ CFLAGS="$CFLAGS -xtarget=generic64 -xarch=v9"
+ ;;
+ esac
+ fi
+ fi
+ fi
+ ])
+
+
+dnl BEECRYPT_SUN_FORTE_CXX
+AC_DEFUN([BEECRYPT_SUN_FORTE_CXX],[
+ ])
+
+
+dnl BEECRYPT_CC
+AC_DEFUN([BEECRYPT_CC],[
+ if test "$CFLAGS" = ""; then
+ bc_cv_c_aggressive_opt=yes
+ else
+ bc_cv_c_aggressive_opt=no
+ fi
+ # set flags for large file support
+ case $target_os in
+ linux* | solaris*)
+ CPPFLAGS="$CPPFLAGS `getconf LFS_CFLAGS`"
+ LDFLAGS="$LDFLAGS `getconf LFS_LDFLAGS`"
+ ;;
+ esac
+ if test "$ac_cv_c_compiler_gnu" = yes; then
+ # Intel's icc can be mistakenly identified as gcc
+ case $target_os in
+ linux*)
+ BEECRYPT_INTEL_CC
+ ;;
+ esac
+ if test "$bc_cv_prog_INTEL_CC" != yes; then
+ BEECRYPT_GNU_CC
fi
+ else
+ case $target_os in
+ aix*)
+ BEECRYPT_IBM_CC
+ ;;
+ hpux*)
+ BEECRYPT_HPUX_CC
+ ;;
+ linux*)
+ BEECRYPT_INTEL_CC
+ ;;
+ solaris*)
+ BEECRYPT_SUN_FORTE_CC
+ ;;
+ osf*)
+ BEECRYPT_COMPAQ_CC
+ ;;
+ esac
fi
])
+dnl BEECRYPT_CXX
+AC_DEFUN([BEECRYPT_CXX],[
+ if test "$CXXFLAGS" = ""; then
+ bc_cv_cxx_aggressive_opt=yes
+ else
+ bc_cv_cxx_aggressive_opt=no
+ fi
+ if test "$ac_cv_cxx_compiler_gnu" = yes; then
+ # Intel's icc can be mistakenly identified as gcc
+ case $target_os in
+ linux*)
+ BEECRYPT_INTEL_CXX
+ ;;
+ esac
+ if test "$bc_cv_prog_INTEL_CXX" != yes; then
+ BEECRYPT_GNU_CXX
+ fi
+ else
+ case $target_os in
+ aix*)
+ BEECRYPT_IBM_CXX
+ ;;
+ hpux*)
+ BEECRYPT_HPUX_CXX
+ ;;
+ linux*)
+ BEECRYPT_INTEL_CXX
+ ;;
+ solaris*)
+ BEECRYPT_SUN_FORTE_CXX
+ ;;
+ osf*)
+ BEECRYPT_COMPAQ_CXX
+ ;;
+ esac
+ fi
+ ])
+
+
+dnl BEECRYPT_NOEXECSTACK
+AC_DEFUN([BEECRYPT_NOEXECSTACK],[
+ AC_CACHE_CHECK([whether the assembler can use noexecstack],bc_cv_as_noexecstack,[
+ cat > conftest.c << EOF
+void foo(void) { }
+EOF
+ if AC_TRY_COMMAND([$CC -c -o conftest.o conftest.c]) then
+ bc_cv_as_noexecstack=yes
+ if test "$ac_cv_c_compiler_gnu" = yes; then
+ CFLAGS="$CFLAGS -Wa,--noexecstack"
+ fi
+ if test "$ac_cv_cxx_compiler_gnu" = yes; then
+ CXXFLAGS="$CXXFLAGS -Wa,--noexecstack"
+ fi
+ else
+ bc_cv_as_noexecstack=no
+ fi
+ ])
+ AC_CACHE_CHECK([whether the linker can use noexecstack],bc_cv_ld_noexecstack,[
+ if AC_TRY_COMMAND([$LD -z noexecstack -o conftest conftest.o]) then
+ bc_cv_ld_noexecstack=yes
+ LDFLAGS="$LDFLAGS -z noexecstack"
+ else
+ bc_cv_ld_noexecstack=no
+ fi
+ ])
+ ])
+
+
+dnl BEECRYPT_LIBTOOL
+AC_DEFUN([BEECRYPT_LIBTOOL],[
+ case $target_os in
+ aix*)
+ case $bc_target_arch in
+ powerpc64)
+ AR="ar -X64"
+ NM="/usr/bin/nm -B -X64"
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $bc_target_arch in
+ sparcv9*)
+ LD="/usr/ccs/bin/ld -64"
+ ;;
+ esac
+ ;;
+ esac
+ ])
+
+
+dnl BEECRYPT_OS_DEFS
+AC_DEFUN([BEECRYPT_OS_DEFS],[
+ AH_TEMPLATE([AIX],[Define to 1 if you are using AIX])
+ AH_TEMPLATE([CYGWIN],[Define to 1 if you are using Cygwin])
+ AH_TEMPLATE([DARWIN],[Define to 1 if you are using Darwin/MacOS X])
+ AH_TEMPLATE([FREEBSD],[Define to 1 if you are using FreeBSD])
+ AH_TEMPLATE([HPUX],[Define to 1 if you are using HPUX])
+ AH_TEMPLATE([LINUX],[Define to 1 if you are using GNU/Linux])
+ AH_TEMPLATE([NETBSD],[Define to 1 if you are using NetBSD])
+ AH_TEMPLATE([OPENBSD],[Define to 1 if you are using OpenBSD])
+ AH_TEMPLATE([OSF],[Define to 1 if you are using OSF])
+ AH_TEMPLATE([QNX],[Define to 1 if you are using QNX])
+ AH_TEMPLATE([SCO_UNIX],[Define to 1 if you are using SCO Unix])
+ AH_TEMPLATE([SOLARIS],[Define to 1 if you are using Solaris])
+ AH_VERBATIM([WIN32],[
+#ifndef WIN32
+ #undef WIN32
+#endif
+ ])
+
+ case $target_os in
+ aix*)
+ AC_DEFINE([AIX])
+ ;;
+ cygwin*)
+ AC_DEFINE([CYGWIN])
+ AC_DEFINE([WIN32])
+ ;;
+ darwin*)
+ AC_DEFINE([DARWIN])
+ ;;
+ freebsd*)
+ AC_DEFINE([FREEBSD])
+ ;;
+ hpux*)
+ AC_DEFINE([HPUX])
+ ;;
+ linux*)
+ AC_DEFINE([LINUX])
+ ;;
+ netbsd*)
+ AC_DEFINE([NETBSD])
+ ;;
+ openbsd*)
+ AC_DEFINE([OPENBSD])
+ ;;
+ osf*)
+ AC_DEFINE([OSF])
+ ;;
+ *qnx)
+ AC_DEFINE([QNX])
+ ;;
+ solaris*)
+ AC_DEFINE([SOLARIS])
+ ;;
+ sysv*uv*)
+ AC_DEFINE([SCO_UNIX])
+ ;;
+ *)
+ AC_MSG_WARN([Operating system type $target_os currently not supported and/or tested])
+ ;;
+ esac
+ ])
+
+
dnl BEECRYPT_ASM_DEFS
-AC_DEFUN(BEECRYPT_ASM_DEFS,[
+AC_DEFUN([BEECRYPT_ASM_DEFS],[
AC_SUBST(ASM_OS,$target_os)
AC_SUBST(ASM_CPU,$bc_target_cpu)
AC_SUBST(ASM_ARCH,$bc_target_arch)
dnl BEECRYPT_ASM_TEXTSEG
-AC_DEFUN(BEECRYPT_ASM_TEXTSEG,[
+AC_DEFUN([BEECRYPT_ASM_TEXTSEG],[
AC_CACHE_CHECK([how to switch to text segment],
bc_cv_asm_textseg,[
case $target_os in
dnl BEECRYPT_ASM_GLOBL
-AC_DEFUN(BEECRYPT_ASM_GLOBL,[
+AC_DEFUN([BEECRYPT_ASM_GLOBL],[
AC_CACHE_CHECK([how to declare a global symbol],
bc_cv_asm_globl,[
case $target_os in
dnl BEECRYPT_ASM_GSYM_PREFIX
-AC_DEFUN(BEECRYPT_ASM_GSYM_PREFIX,[
+AC_DEFUN([BEECRYPT_ASM_GSYM_PREFIX],[
AC_CACHE_CHECK([if global symbols need leading underscore],
bc_cv_asm_gsym_prefix,[
case $target_os in
dnl BEECRYPT_ASM_LSYM_PREFIX
-AC_DEFUN(BEECRYPT_ASM_LSYM_PREFIX,[
+AC_DEFUN([BEECRYPT_ASM_LSYM_PREFIX],[
AC_CACHE_CHECK([how to declare a local symbol],
bc_cv_asm_lsym_prefix,[
case $target_os in
dnl BEECRYPT_ASM_ALIGN
-AC_DEFUN(BEECRYPT_ASM_ALIGN,[
+AC_DEFUN([BEECRYPT_ASM_ALIGN],[
AC_CACHE_CHECK([how to align symbols],
bc_cv_asm_align,[
case $target_cpu in
+ alpha*)
+ bc_cv_asm_align=".align 5" ;;
i[[3456]]86 | athlon*)
bc_cv_asm_align=".align 4" ;;
ia64)
bc_cv_asm_align=".align 4" ;;
sparc*)
bc_cv_asm_align=".align 4" ;;
+ x86_64)
+ bc_cv_asm_align=".align 16" ;;
esac
])
AC_SUBST(ASM_ALIGN,$bc_cv_asm_align)
dnl BEECRYPT_ASM_SOURCES
-AC_DEFUN(BEECRYPT_ASM_SOURCES,[
+AC_DEFUN([BEECRYPT_ASM_SOURCES],[
echo > mpopt.s
echo > aesopt.s
echo > blowfishopt.s
fi
fi
])
+
+
+dnl BEECRYPT_DLFCN
+
+AC_DEFUN([BEECRYPT_DLFCN],[
+ AH_TEMPLATE([HAVE_DLFCN_H],[.])
+ AC_CHECK_HEADERS([dlfcn.h])
+ if test "$ac_cv_header_dlfcn_h" = yes; then
+ AC_SEARCH_LIBS([dlopen],[dl dld],[
+ ])
+ fi
+ ])
+
+
+dnl BEECRYPT_MULTITHREAD
+AC_DEFUN([BEECRYPT_MULTITHREAD],[
+ AH_TEMPLATE([ENABLE_THREADS],[Define to 1 if you want to enable multithread support])
+ AH_TEMPLATE([HAVE_THREAD_H],[.])
+ AH_TEMPLATE([HAVE_PTHREAD_H],[.])
+ AH_TEMPLATE([HAVE_SYNCH_H],[.])
+ AH_TEMPLATE([HAVE_SEMAPHORE_H],[.])
+
+ if test "$ac_enable_threads" = yes; then
+ AC_CHECK_HEADERS([synch.h thread.h pthread.h semaphore.h])
+ fi
+
+ bc_include_synch_h=
+ bc_include_thread_h=
+ bc_include_pthread_h=
+ bc_typedef_bc_cond_t=
+ bc_typedef_bc_mutex_t=
+ bc_typedef_bc_thread_t=
+ if test "$ac_enable_threads" = yes; then
+ if test "$ac_cv_header_thread_h" = yes -a "$ac_cv_header_synch_h" = yes; then
+ bc_include_synch_h="#include <synch.h>"
+ bc_include_thread_h="#include <thread.h>"
+ bc_typedef_bc_cond_t="typedef cond_t bc_cond_t;"
+ bc_typedef_bc_mutex_t="typedef mutex_t bc_mutex_t;"
+ bc_typedef_bc_thread_t="typedef thread_t bc_thread_t;"
+ AC_SEARCH_LIBS([mutex_lock],[thread],[
+ AC_DEFINE([ENABLE_THREADS],1)
+ ])
+ elif test "$ac_cv_header_pthread_h" = yes; then
+ bc_include_pthread_h="#include <pthread.h>"
+ bc_typedef_bc_cond_t="typedef pthread_cond_t bc_cond_t;"
+ bc_typedef_bc_mutex_t="typedef pthread_mutex_t bc_mutex_t;"
+ bc_typedef_bc_thread_t="typedef pthread_t bc_thread_t;"
+ # On most systems this tests will say 'none required', but that doesn't
+ # mean that the linked code will work correctly!
+ case $target_os in
+ linux* | solaris* )
+ AC_DEFINE([ENABLE_THREADS],1)
+ LIBS="-lpthread $LIBS"
+ ;;
+ osf*)
+ AC_DEFINE([ENABLE_THREADS],1)
+ LIBS="-lpthread -lmach -lexc $LIBS"
+ ;;
+ *)
+ AC_SEARCH_LIBS([pthread_mutex_lock],[pthread],[
+ AC_DEFINE([ENABLE_THREADS],1)
+ ])
+ ;;
+ esac
+ else
+ AC_MSG_WARN([Don't know which thread library to check for])
+ fi
+ fi
+ AC_SUBST(INCLUDE_SYNCH_H,$bc_include_synch_h)
+ AC_SUBST(INCLUDE_THREAD_H,$bc_include_thread_h)
+ AC_SUBST(INCLUDE_PTHREAD_H,$bc_include_pthread_h)
+ AC_SUBST(TYPEDEF_BC_COND_T,$bc_typedef_bc_cond_t)
+ AC_SUBST(TYPEDEF_BC_MUTEX_T,$bc_typedef_bc_mutex_t)
+ AC_SUBST(TYPEDEF_BC_THREAD_T,$bc_typedef_bc_thread_t)
+ ])
-/*@-bitwisesigned@*/
/*
* Copyright (c) 2002, 2003 Bob Deblier
*
* \ingroup BC_aes_m BC_m
*/
-#include "system.h"
-#include "beecrypt.h"
-#include "aesopt.h"
-#include "aes.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/aes.h"
#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN)
# if (BYTE_ORDER != BIG_ENDIAN) && (BYTE_ORDER != LITTLE_ENDIAN)
# endif
#endif
-/*!\addtogroup BC_aes_m
- * \{
- */
-
#if WORDS_BIGENDIAN
-# include "aes_be.h"
+# include "beecrypt/aes_be.h"
#else
-# include "aes_le.h"
+# include "beecrypt/aes_le.h"
#endif
#ifdef ASM_AESENCRYPTECB
extern int aesDecryptECB(aesParam*, uint32_t*, const uint32_t*, unsigned int);
#endif
-/*@-sizeoftype@*/
-/*@-castfcnptr@*/
const blockCipher aes = {
"AES",
sizeof(aesParam),
- 16U,
- 128U,
- 256U,
- 64U,
+ 16,
+ 128,
+ 256,
+ 64,
(blockCipherSetup) aesSetup,
(blockCipherSetIV) aesSetIV,
/* raw */
},
(blockCipherFeedback) aesFeedback
};
-/*@=castfcnptr@*/
-/*@=sizeoftype@*/
int aesSetup(aesParam* ap, const byte* key, size_t keybits, cipherOperation op)
{
{
t = rk[3];
#if WORDS_BIGENDIAN
- t = (_ae4[(t >> 16) & 0xff] & 0xff000000U) ^
- (_ae4[(t >> 8) & 0xff] & 0x00ff0000U) ^
- (_ae4[(t ) & 0xff] & 0x0000ff00U) ^
- (_ae4[(t >> 24) ] & 0x000000ffU) ^
+ t = (_ae4[(t >> 16) & 0xff] & 0xff000000) ^
+ (_ae4[(t >> 8) & 0xff] & 0x00ff0000) ^
+ (_ae4[(t ) & 0xff] & 0x0000ff00) ^
+ (_ae4[(t >> 24) ] & 0x000000ff) ^
_arc[i];
#else
- t = (_ae4[(t >> 8) & 0xff] & 0x000000ffU) ^
- (_ae4[(t >> 16) & 0xff] & 0x0000ff00U) ^
- (_ae4[(t >> 24) ] & 0x00ff0000U) ^
- (_ae4[(t ) & 0xff] & 0xff000000U) ^
+ t = (_ae4[(t >> 8) & 0xff] & 0x000000ff) ^
+ (_ae4[(t >> 16) & 0xff] & 0x0000ff00) ^
+ (_ae4[(t >> 24) ] & 0x00ff0000) ^
+ (_ae4[(t ) & 0xff] & 0xff000000) ^
_arc[i];
#endif
rk[4] = (t ^= rk[0]);
{
t = rk[5];
#if WORDS_BIGENDIAN
- t = (_ae4[(t >> 16) & 0xff] & 0xff000000U) ^
- (_ae4[(t >> 8) & 0xff] & 0x00ff0000U) ^
- (_ae4[(t ) & 0xff] & 0x0000ff00U) ^
- (_ae4[(t >> 24) ] & 0x000000ffU) ^
+ t = (_ae4[(t >> 16) & 0xff] & 0xff000000) ^
+ (_ae4[(t >> 8) & 0xff] & 0x00ff0000) ^
+ (_ae4[(t ) & 0xff] & 0x0000ff00) ^
+ (_ae4[(t >> 24) ] & 0x000000ff) ^
_arc[i];
#else
- t = (_ae4[(t >> 8) & 0xff] & 0x000000ffU) ^
- (_ae4[(t >> 16) & 0xff] & 0x0000ff00U) ^
- (_ae4[(t >> 24) ] & 0x00ff0000U) ^
- (_ae4[(t ) & 0xff] & 0xff000000U) ^
+ t = (_ae4[(t >> 8) & 0xff] & 0x000000ff) ^
+ (_ae4[(t >> 16) & 0xff] & 0x0000ff00) ^
+ (_ae4[(t >> 24) ] & 0x00ff0000) ^
+ (_ae4[(t ) & 0xff] & 0xff000000) ^
_arc[i];
#endif
rk[6] = (t ^= rk[0]);
{
t = rk[7];
#if WORDS_BIGENDIAN
- t = (_ae4[(t >> 16) & 0xff] & 0xff000000U) ^
- (_ae4[(t >> 8) & 0xff] & 0x00ff0000U) ^
- (_ae4[(t ) & 0xff] & 0x0000ff00U) ^
- (_ae4[(t >> 24) ] & 0x000000ffU) ^
+ t = (_ae4[(t >> 16) & 0xff] & 0xff000000) ^
+ (_ae4[(t >> 8) & 0xff] & 0x00ff0000) ^
+ (_ae4[(t ) & 0xff] & 0x0000ff00) ^
+ (_ae4[(t >> 24) ] & 0x000000ff) ^
_arc[i];
#else
- t = (_ae4[(t >> 8) & 0xff] & 0x000000ffU) ^
- (_ae4[(t >> 16) & 0xff] & 0x0000ff00U) ^
- (_ae4[(t >> 24) ] & 0x00ff0000U) ^
- (_ae4[(t ) & 0xff] & 0xff000000U) ^
+ t = (_ae4[(t >> 8) & 0xff] & 0x000000ff) ^
+ (_ae4[(t >> 16) & 0xff] & 0x0000ff00) ^
+ (_ae4[(t >> 24) ] & 0x00ff0000) ^
+ (_ae4[(t ) & 0xff] & 0xff000000) ^
_arc[i];
#endif
rk[8] = (t ^= rk[0]);
if (++i == 7)
break;
#if WORDS_BIGENDIAN
- t = (_ae4[(t >> 24) ] & 0xff000000U) ^
- (_ae4[(t >> 16) & 0xff] & 0x00ff0000U) ^
- (_ae4[(t >> 8) & 0xff] & 0x0000ff00U) ^
- (_ae4[(t ) & 0xff] & 0x000000ffU);
+ t = (_ae4[(t >> 24) ] & 0xff000000) ^
+ (_ae4[(t >> 16) & 0xff] & 0x00ff0000) ^
+ (_ae4[(t >> 8) & 0xff] & 0x0000ff00) ^
+ (_ae4[(t ) & 0xff] & 0x000000ff);
#else
- t = (_ae4[(t ) & 0xff] & 0x000000ffU) ^
- (_ae4[(t >> 8) & 0xff] & 0x0000ff00U) ^
- (_ae4[(t >> 16) & 0xff] & 0x00ff0000U) ^
- (_ae4[(t >> 24) ] & 0xff000000U);
+ t = (_ae4[(t ) & 0xff] & 0x000000ff) ^
+ (_ae4[(t >> 8) & 0xff] & 0x0000ff00) ^
+ (_ae4[(t >> 16) & 0xff] & 0x00ff0000) ^
+ (_ae4[(t >> 24) ] & 0xff000000);
#endif
rk[12] = (t ^= rk[4]);
rk[13] = (t ^= rk[5]);
{
rk += 4;
#if WORDS_BIGENDIAN
- rk[0] =
- _ad0[_ae4[(rk[0] >> 24) ] & 0xff] ^
- _ad1[_ae4[(rk[0] >> 16) & 0xff] & 0xff] ^
+ rk[0] =
+ _ad0[_ae4[(rk[0] >> 24) ] & 0xff] ^
+ _ad1[_ae4[(rk[0] >> 16) & 0xff] & 0xff] ^
_ad2[_ae4[(rk[0] >> 8) & 0xff] & 0xff] ^
_ad3[_ae4[(rk[0] ) & 0xff] & 0xff];
rk[1] =
_ad3[_ae4[(rk[2] ) & 0xff] & 0xff];
rk[3] =
_ad0[_ae4[(rk[3] >> 24) ] & 0xff] ^
- _ad1[_ae4[(rk[3] >> 16) & 0xff] & 0xff] ^
- _ad2[_ae4[(rk[3] >> 8) & 0xff] & 0xff] ^
- _ad3[_ae4[(rk[3] ) & 0xff] & 0xff];
+ _ad1[_ae4[(rk[3] >> 16) & 0xff] & 0xff] ^
+ _ad2[_ae4[(rk[3] >> 8) & 0xff] & 0xff] ^
+ _ad3[_ae4[(rk[3] ) & 0xff] & 0xff];
#else
rk[0] =
_ad0[_ae4[(rk[0] ) & 0xff] & 0xff] ^
#ifndef ASM_AESSETIV
int aesSetIV(aesParam* ap, const byte* iv)
{
-/*@-mayaliasunique@*/
if (iv)
memcpy(ap->fdback, iv, 16);
else
memset(ap->fdback, 0, 16);
-/*@=mayaliasunique@*/
return 0;
}
{
return ap->fdback;
}
-/*@=bitwisesigned@*/
-/*!\}
- */
#ifndef _AES_H
#define _AES_H
-/** \ingroup BC_aes_m
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/aesopt.h"
+
+/*!\brief Holds all the parameters necessary for the AES cipher.
+ * \ingroup BC_aes_m
*/
typedef struct
{
+ /*!\var k
+ * \brief Holds the key expansion.
+ */
uint32_t k[64];
+ /*!\var nr
+ * \brief Number of rounds to be used in encryption/decryption.
+ */
uint32_t nr;
+ /*!\var fdback
+ * \brief Buffer to be used by block chaining or feedback modes.
+ */
uint32_t fdback[4];
} aesParam;
extern "C" {
#endif
-/** \ingroup BC_aes_m
+/*!\var aes
+ * \brief Holds the full API description of the AES algorithm.
*/
-/*@observer@*/ /*@unchecked@*/
extern const BEECRYPTAPI blockCipher aes;
-/** \ingroup BC_aes_m
- * The cipher's setup function.
- *
- * This function expands the key depending on whether the ENCRYPT or DECRYPT
- * operation was selected.
- *
- * @param ap parameter block
- * @param key key value
- * @param keybits number of bits in the key (128, 192 or 256)
- * @param op ENCRYPT or DECRYPT.
- * @retval 0 on success, -1 on failure.
+/*!\fn int aesSetup(aesParam* ap, const byte* key, size_t keybits, cipherOperation op)
+ * \brief This function performs the cipher's key expansion.
+ * \param ap The cipher's parameter block.
+ * \param key The key value.
+ * \param keybits The number of bits in the key; legal values are:
+ * 128, 192 and 256.
+ * \param op ENCRYPT or DECRYPT.
+ * \retval 0 on success.
+ * \retval -1 on failure.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int aesSetup (aesParam* ap, const byte* key, size_t keybits, cipherOperation op)
- /*@modifies ap @*/;
-/*@=exportlocal@*/
+int aesSetup (aesParam* ap, const byte* key, size_t keybits, cipherOperation op);
-/** \ingroup BC_aes_m
- * The Initialization Vector setup function.
- *
- * This function is only necessary in block chaining or feedback modes.
- *
- * @param ap parameter block
- * @param iv initialization vector (or NULL)
- * @retval 0 on success.
+/*!\fn int aesSetIV(aesParam* ap, const byte* iv)
+ * \brief This function sets the Initialization Vector.
+ * \note This function is only useful in block chaining or feedback modes.
+ * \param ap The cipher's parameter block.
+ * \param iv The initialization vector; may be null.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int aesSetIV (aesParam* ap, /*@null@*/ const byte* iv)
- /*@modifies ap @*/;
-/*@=exportlocal@*/
+int aesSetIV (aesParam* ap, const byte* iv);
-/** \ingroup BC_aes_m
- * The raw encryption function.
- *
- * This function encrypts one block of data; the size of a block is 128 bits.
- *
- * @param ap parameter block
- * @param dst ciphertext (aligned on 32-bit boundary)
- * @param src cleartext (aligned on 32-bit boundary)
- * @retval 0 on success.
+/*!\fn aesEncrypt(aesParam* ap, uint32_t* dst, const uint32_t* src)
+ * \brief This function performs the raw AES encryption; it encrypts one block
+ * of 128 bits.
+ * \param ap The cipher's parameter block.
+ * \param dst The ciphertext; should be aligned on 32-bit boundary.
+ * \param src The cleartext; should be aligned on 32-bit boundary.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int aesEncrypt(aesParam* ap, uint32_t* dst, const uint32_t* src)
- /*@modifies dst @*/;
-/*@=exportlocal@*/
+int aesEncrypt (aesParam* ap, uint32_t* dst, const uint32_t* src);
-/** \ingroup BC_aes_m
- * The raw decryption function.
- *
- * This function decrypts one block of data; the size of a block is 128 bits.
- *
- * @param ap parameter block
- * @param dst cleartext (aligned on 32-bit boundary)
- * @param src ciphertext (aligned on 32-bit boundary)
- * @retval 0 on success.
+/*!\fn aesDecrypt(aesParam* ap, uint32_t* dst, const uint32_t* src)
+ * \brief This function performs the raw AES decryption; it decrypts one block
+ * of 128 bits.
+ * \param ap The cipher's parameter block.
+ * \param dst The cleartext; should be aligned on 32-bit boundary.
+ * \param src The ciphertext; should be aligned on 32-bit boundary.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int aesDecrypt(aesParam* ap, uint32_t* dst, const uint32_t* src)
- /*@modifies dst @*/;
-/*@=exportlocal@*/
+int aesDecrypt (aesParam* ap, uint32_t* dst, const uint32_t* src);
-/** \ingroup BC_aes_m
- */
-/*@-exportlocal@*/
-BEECRYPTAPI /*@observer@*/
-uint32_t* aesFeedback(aesParam* ap)
- /*@*/;
-/*@=exportlocal@*/
+BEECRYPTAPI
+uint32_t* aesFeedback(aesParam* ap);
#ifdef __cplusplus
}
*
*/
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ae0[256] = {
0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d,
0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554,
0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ae1[256] = {
0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b,
0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5,
0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ae2[256] = {
0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b,
0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5,
0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ae3[256] = {
0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6,
0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491,
0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ae4[256] = {
0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b,
0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5,
0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ad0[256] = {
0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96,
0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393,
0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ad1[256] = {
0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e,
0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303,
0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ad2[256] = {
0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27,
0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3,
0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ad3[256] = {
0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a,
0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b,
0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ad4[256] = {
0x52525252, 0x09090909, 0x6a6a6a6a, 0xd5d5d5d5,
0x30303030, 0x36363636, 0xa5a5a5a5, 0x38383838,
0x55555555, 0x21212121, 0x0c0c0c0c, 0x7d7d7d7d
};
-/*@observer@*/ /*@unchecked@*/
static const uint32_t _arc[] = {
0x01000000, 0x02000000, 0x04000000, 0x08000000,
0x10000000, 0x20000000, 0x40000000, 0x80000000,
*
*/
-/*@observer@*/ /*@unchecked@*/
#if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
const uint64_t _ae0[256] = {
#else
0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c
};
-/*@observer@*/ /*@unchecked@*/
#if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
const uint64_t _ae1[256] = {
#else
0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a
};
-/*@observer@*/ /*@unchecked@*/
#if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
const uint64_t _ae2[256] = {
#else
0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16
};
-/*@observer@*/ /*@unchecked@*/
#if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
const uint64_t _ae3[256] = {
#else
0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ae4[256] = {
0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b,
0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5,
0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616
};
-/*@observer@*/ /*@unchecked@*/
#if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
const uint64_t _ad0[256] = {
#else
0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0
};
-/*@observer@*/ /*@unchecked@*/
#if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
const uint64_t _ad1[256] = {
#else
0x84cb7b61, 0xb632d570, 0x5c6c4874, 0x57b8d042
};
-/*@observer@*/ /*@unchecked@*/
#if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
const uint64_t _ad2[256] = {
#else
0xcb7b6184, 0x32d570b6, 0x6c48745c, 0xb8d04257
};
-/*@observer@*/ /*@unchecked@*/
#if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
const uint64_t _ad3[256] = {
#else
0x7b6184cb, 0xd570b632, 0x48745c6c, 0xd04257b8
};
-/*@observer@*/ /*@unchecked@*/
const uint32_t _ad4[256] = {
0x52525252, 0x09090909, 0x6a6a6a6a, 0xd5d5d5d5,
0x30303030, 0x36363636, 0xa5a5a5a5, 0x38383838,
0x55555555, 0x21212121, 0x0c0c0c0c, 0x7d7d7d7d
};
-/*@observer@*/ /*@unchecked@*/
static const uint32_t _arc[] = {
0x00000001, 0x00000002, 0x00000004, 0x00000008,
0x00000010, 0x00000020, 0x00000040, 0x00000080,
#ifndef _AESOPT_H
#define _AESOPT_H
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/aes.h"
+
#ifdef __cplusplus
extern "C" {
#endif
#if defined(__INTEL_COMPILER)
# if defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686)
+# if defined(OPTIMIZE_MMX)
# define ASM_AESENCRYPT
# define ASM_AESENCRYPTECB
# define ASM_AESDECRYPT
# define ASM_AESDECRYPTECB
# endif
+# endif
#endif
#if defined(__SUNPRO_C) || defined(__SUNPRO_CC)
*
*/
-/*!\file beecrypt.api.h
+/*!\file api.h
* \brief BeeCrypt API, portability headers.
* \author Bob Deblier <bob.deblier@pandora.be>
*/
#endif
#if WIN32 && !__CYGWIN32__
-# include "beecrypt.win.h"
+# include "beecrypt/win.h"
# ifdef BEECRYPT_DLL_EXPORT
# define BEECRYPTAPI __declspec(dllexport)
# else
# define BEECRYPTAPI __declspec(dllimport)
# endif
+# ifdef BEECRYPT_CXX_DLL_EXPORT
+# define BEECRYPTCXXAPI __declspec(dllexport)
+# define BEECRYPTCXXTEMPLATE
+# else
+# define BEECRYPTCXXAPI __declspec(dllimport)
+# define BEECRYPTCXXTEMPLATE extern
+# endif
#else
-# include "beecrypt.gnu.h"
+# include "beecrypt/gnu.h"
# define BEECRYPTAPI
+# define BEECRYPTCXXAPI
#endif
#ifndef ROTL32
typedef uint8_t byte;
-/*@-typeuse@*/
typedef int8_t javabyte;
typedef int16_t javashort;
typedef int32_t javaint;
-/*@=typeuse@*/
typedef int64_t javalong;
-/*@-typeuse@*/
typedef uint16_t javachar;
-/*@=typeuse@*/
#if (MP_WBITS == 64)
typedef uint64_t mpw;
typedef uint64_t mpdw;
# endif
typedef uint32_t mpw;
-/*@-typeuse@*/
typedef uint16_t mphw;
-/*@=typeuse@*/
#else
# error
#endif
-#!/bin/sh
-
+#! /bin/sh
export CFLAGS
export LDFLAGS
-
-LTV="libtoolize (GNU libtool) 1.5.6"
-ACV="autoconf (GNU Autoconf) 2.59"
-AMV="automake (GNU automake) 1.9"
-USAGE="
-This script documents the versions of the tools I'm using to build rpm:
- libtool-1.5.6
- autoconf-2.59
- automake-1.9
-Simply edit this script to change the libtool/autoconf/automake versions
-checked if you need to, as rpm should build (and has built) with all
-recent versions of libtool/autoconf/automake.
-"
-
-[ "`libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1
-[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1
-[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" && exit 1
-
-libtoolize --copy --force
+libtoolize --force --copy
aclocal
-autoheader
automake -a -c
autoconf
-
-if [ "$1" = "--noconfigure" ]; then
- exit 0;
-fi
-
-if [ X"$@" = X -a "X`uname -s`" = "XLinux" ]; then
- if [ -d /usr/share/man ]; then
- mandir=/usr/share/man
- infodir=/usr/share/info
- else
- mandir=/usr/man
- infodir=/usr/info
- fi
- CPPFLAGS="-Wall -g" ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --infodir=${infodir} --mandir=${mandir} --enable-static --with-python "$@"
-else
- ./configure "$@"
-fi
+autoheader
-/*@-type@*/
/*
* Copyright (c) 2000, 2001, 2002 Virtual Unlimited B.V.
*
* \author Bob Deblier <bob.deblier@pandora.be>
*/
-#include "system.h"
-#include "base64.h"
-#include "endianness.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
-/*@unchecked@*/
-static int _debug = 0;
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/base64.h"
+#include "beecrypt/endianness.h"
+
+#if HAVE_CTYPE_H
+# include <ctype.h>
+#endif
-/*@unchecked@*/ /*@observer@*/
static const char* to_b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/* encode 64 characters per line */
while (div > 0)
{
- buf[0] = to_b64[ ((unsigned)data[0] >> 2) & 0x3f];
- buf[1] = to_b64[(((unsigned)data[0] << 4) & 0x30) | (((unsigned)data[1] >> 4) & 0xf)];
- buf[2] = to_b64[(((unsigned)data[1] << 2) & 0x3c) | (((unsigned)data[2] >> 6) & 0x3)];
- buf[3] = to_b64[ (unsigned)data[2] & 0x3f];
+ buf[0] = to_b64[ (data[0] >> 2) & 0x3f];
+ buf[1] = to_b64[((data[0] << 4) & 0x30) | ((data[1] >> 4) & 0xf)];
+ buf[2] = to_b64[((data[1] << 2) & 0x3c) | ((data[2] >> 6) & 0x3)];
+ buf[3] = to_b64[ data[2] & 0x3f];
data += 3;
buf += 4;
div--;
switch (rem)
{
case 2:
- buf[0] = to_b64[ ((unsigned)data[0] >> 2) & 0x3f];
- buf[1] = to_b64[(((unsigned)data[0] << 4) & 0x30) + (((unsigned)data[1] >> 4) & 0xf)];
- buf[2] = to_b64[ ((unsigned)data[1] << 2) & 0x3c];
+ buf[0] = to_b64[ (data[0] >> 2) & 0x3f];
+ buf[1] = to_b64[((data[0] << 4) & 0x30) + ((data[1] >> 4) & 0xf)];
+ buf[2] = to_b64[ (data[1] << 2) & 0x3c];
buf[3] = '=';
buf += 4;
chars += 4;
break;
case 1:
- buf[0] = to_b64[ ((unsigned)data[0] >> 2) & 0x3f];
- buf[1] = to_b64[ ((unsigned)data[0] << 4) & 0x30];
+ buf[0] = to_b64[ (data[0] >> 2) & 0x3f];
+ buf[1] = to_b64[ (data[0] << 4) & 0x30];
buf[2] = '=';
buf[3] = '=';
buf += 4;
*buf = '\0';
}
- /*@-dependenttrans@*/ /* FIX: buf = string makes string dependent */
return string;
- /*@=dependenttrans@*/
}
memchunk* b64dec(const char* string)
for (i = 0; i < vrfy; i++)
{
if (isspace(tmp[i]))
- /*@innercontinue@*/ continue;
+ continue;
if (tmp[i] == '=')
{
return 0;
/* end-of-message recognized */
- /*@innerbreak@*/ break;
+ break;
}
else
{
for (i = 0; i < length; i++)
{
register char ch = string[i];
- register byte bits;
+ register byte bits = 0;
if (isspace(ch))
continue;
- bits = 0;
if ((ch >= 'A') && (ch <= 'Z'))
{
bits = (byte) (ch - 'A');
{
case 0:
data[tw+0] = (bits << 2) & 0xfc;
- /*@switchbreak@*/ break;
+ break;
case 1:
data[tw+0] |= (bits >> 4) & 0x03;
data[tw+1] = (bits << 4) & 0xf0;
- /*@switchbreak@*/ break;
+ break;
case 2:
data[tw+1] |= (bits >> 2) & 0x0f;
data[tw+2] = (bits << 6) & 0xc0;
- /*@switchbreak@*/ break;
+ break;
case 3:
data[tw+2] |= bits & 0x3f;
- /*@switchbreak@*/ break;
+ break;
}
if (qw == 4)
const char * b64encode_eolstr = B64ENCODE_EOLSTR;
-/*@-internalglobs -modfilesys @*/
-char * b64encode (const void * data, size_t ns)
+char* b64encode(const void* data, size_t ns)
{
- static char b64enc[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ static char b64enc[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
const char *e;
const unsigned char *s = data;
unsigned char *t, *te;
nt = ((ns + 2) / 3) * 4;
/* Add additional bytes necessary for eol string(s). */
- if (b64encode_chars_per_line > 0 && b64encode_eolstr != NULL) {
- lc = (nt + b64encode_chars_per_line - 1) / b64encode_chars_per_line;
- if (((nt + b64encode_chars_per_line - 1) % b64encode_chars_per_line) != 0)
- ++lc;
- nt += lc * strlen(b64encode_eolstr);
+ if (b64encode_chars_per_line > 0 && b64encode_eolstr != NULL)
+ {
+ lc = (nt + b64encode_chars_per_line - 1) / b64encode_chars_per_line;
+ if (((nt + b64encode_chars_per_line - 1) % b64encode_chars_per_line) != 0)
+ ++lc;
+ nt += lc * strlen(b64encode_eolstr);
}
t = te = malloc(nt + 1);
lc = 0;
if (te)
- while (ns > 0) {
-
-if (_debug)
-fprintf(stderr, "%7u %02x %02x %02x -> %02x %02x %02x %02x\n",
-(unsigned)ns, (unsigned)s[0], (unsigned)s[1], (unsigned)s[2],
-(unsigned)(s[0] >> 2),
-(unsigned)((s[0] & 0x3) << 4) | (s[1] >> 4),
-(unsigned)((s[1] & 0xf) << 2) | (s[2] >> 6),
-(unsigned)(s[2]& 0x3f));
- c = *s++;
- *te++ = b64enc[ (c >> 2) ], lc++;
- *te++ = b64enc[ ((c & 0x3) << 4) | (*s >> 4) ], lc++;
- if (--ns == 0) {
- *te++ = '=';
- *te++ = '=';
- continue;
- }
- c = *s++;
- *te++ = b64enc[ ((c & 0xf) << 2) | (*s >> 6) ], lc++;
- if (--ns == 0) {
- *te++ = '=';
- continue;
- }
- *te++ = b64enc[ (int)(*s & 0x3f) ], lc++;
-
- /* Append eol string if desired. */
- if (b64encode_chars_per_line > 0 && b64encode_eolstr != NULL) {
- if (lc >= b64encode_chars_per_line) {
- for (e = b64encode_eolstr; *e != '\0'; e++)
- *te++ = *e;
- lc = 0;
- }
- }
- s++;
- --ns;
- }
+ while (ns > 0)
+ {
+ c = *s++;
+ *te++ = b64enc[ (c >> 2) ], lc++;
+ *te++ = b64enc[ ((c & 0x3) << 4) | (*s >> 4) ], lc++;
+ if (--ns == 0)
+ {
+ *te++ = '=';
+ *te++ = '=';
+ continue;
+ }
+ c = *s++;
+ *te++ = b64enc[ ((c & 0xf) << 2) | (*s >> 6) ], lc++;
+ if (--ns == 0)
+ {
+ *te++ = '=';
+ continue;
+ }
+ *te++ = b64enc[ (int)(*s & 0x3f) ], lc++;
- if (te) {
- /* Append eol string if desired. */
- if (b64encode_chars_per_line > 0 && b64encode_eolstr != NULL) {
- if (lc != 0) {
- for (e = b64encode_eolstr; *e != '\0'; e++)
- *te++ = *e;
- }
+ /* Append eol string if desired. */
+ if (b64encode_chars_per_line > 0 && b64encode_eolstr != NULL)
+ {
+ if (lc >= b64encode_chars_per_line)
+ {
+ for (e = b64encode_eolstr; *e != '\0'; e++)
+ *te++ = *e;
+ lc = 0;
+ }
+ }
+ s++;
+ --ns;
}
- *te = '\0';
+
+ if (te)
+ {
+ /* Append eol string if desired. */
+ if (b64encode_chars_per_line > 0 && b64encode_eolstr != NULL)
+ {
+ if (lc != 0)
+ {
+ for (e = b64encode_eolstr; *e != '\0'; e++)
+ *te++ = *e;
+ }
+ }
+ *te = '\0';
}
- /*@-mustfree -compdef @*/
- return (char *) t;
- /*@=mustfree =compdef @*/
+ return (char*) t;
}
-/*@=globs =internalglobs =modfilesys @*/
-/*@-internalglobs -modfilesys @*/
#define CRC24_INIT 0xb704ceL
#define CRC24_POLY 0x1864cfbL
-char * b64crc (const unsigned char * data, size_t ns)
+char* b64crc (const unsigned char* data, size_t ns)
{
const unsigned char *s = data;
uint32_t crc = CRC24_INIT;
- while (ns-- > 0) {
- int i;
- crc ^= (*s++) << 16;
- for (i = 0; i < 8; i++) {
- crc <<= 1;
- if (crc & 0x1000000)
- crc ^= CRC24_POLY;
- }
+ while (ns-- > 0)
+ {
+ int i;
+ crc ^= (*s++) << 16;
+ for (i = 0; i < 8; i++)
+ {
+ crc <<= 1;
+ if (crc & 0x1000000)
+ crc ^= CRC24_POLY;
+ }
}
crc &= 0xffffff;
- /*@-unrecog@*/ /* FIX: include endianness.h? */
#if !WORDS_BIGENDIAN
crc = swapu32(crc);
#endif
- /*@=unrecog@*/
data = (byte *)&crc;
data++;
ns = 3;
- return b64encode(data, ns);
+
+ return b64encode(data, ns);
}
-/*@=internalglobs =modfilesys @*/
-const char * b64decode_whitespace = B64DECODE_WHITESPACE;
+const char* b64decode_whitespace = B64DECODE_WHITESPACE;
-/*@-internalglobs -modfilesys @*/
-int b64decode (const char * s, void ** datap, size_t *lenp)
+int b64decode(const char* s, void** datap, size_t* lenp)
{
- unsigned char b64dec[256];
- const unsigned char *t;
- unsigned char *te;
- int ns, nt;
- unsigned a, b, c, d;
+ unsigned char b64dec[256];
+ const unsigned char *t;
+ unsigned char *te;
+ int ns, nt;
+ unsigned a, b, c, d;
if (s == NULL) return 1;
/* Setup character lookup tables. */
memset(b64dec, 0x80, sizeof(b64dec));
for (c = 'A'; c <= 'Z'; c++)
- b64dec[ c ] = 0 + (c - 'A');
+ b64dec[ c ] = 0 + (c - 'A');
for (c = 'a'; c <= 'z'; c++)
- b64dec[ c ] = 26 + (c - 'a');
+ b64dec[ c ] = 26 + (c - 'a');
for (c = '0'; c <= '9'; c++)
- b64dec[ c ] = 52 + (c - '0');
- b64dec[(unsigned)'+'] = 62;
- b64dec[(unsigned)'/'] = 63;
- b64dec[(unsigned)'='] = 0;
+ b64dec[ c ] = 52 + (c - '0');
+ b64dec[(unsigned)'+'] = 62;
+ b64dec[(unsigned)'/'] = 63;
+ b64dec[(unsigned)'='] = 0;
/* Mark whitespace characters. */
- if (b64decode_whitespace) {
- const char *e;
- for (e = b64decode_whitespace; *e != '\0'; e++) {
- if (b64dec[ (unsigned)*e ] == 0x80)
- b64dec[ (unsigned)*e ] = 0x81;
- }
+ if (b64decode_whitespace)
+ {
+ const char *e;
+ for (e = b64decode_whitespace; *e != '\0'; e++)
+ {
+ if (b64dec[ (unsigned)*e ] == 0x80)
+ b64dec[ (unsigned)*e ] = 0x81;
+ }
}
/* Validate input buffer */
ns = 0;
- for (t = (unsigned char *) s; *t != '\0'; t++) {
- switch (b64dec[(unsigned)*t]) {
- case 0x80: /* invalid chararcter */
-if (_debug)
-fprintf(stderr, "--- b64decode %c(%02x) %02x\n", *t, (unsigned)(*t & 0xff), (unsigned)b64dec[ (unsigned)*t ]);
- return 3;
- /*@notreached@*/ /*@switchbreak@*/ break;
- case 0x81: /* white space */
- /*@switchbreak@*/ break;
- default:
- ns++;
- /*@switchbreak@*/ break;
- }
+ for (t = (unsigned char*) s; *t != '\0'; t++)
+ {
+ switch (b64dec[(unsigned) *t])
+ {
+ case 0x80: /* invalid chararcter */
+ return 3;
+ case 0x81: /* white space */
+ break;
+ default:
+ ns++;
+ break;
+ }
}
- if (((unsigned)ns) & 0x3) return 2;
+ if (((unsigned) ns) & 0x3) return 2;
nt = (ns / 4) * 3;
t = te = malloc(nt + 1);
- while (ns > 0) {
-
- /* Get next 4 characters, ignoring whitespace. */
- while ((a = b64dec[ (unsigned)*s++ ]) == 0x81)
- {};
- while ((b = b64dec[ (unsigned)*s++ ]) == 0x81)
- {};
- while ((c = b64dec[ (unsigned)*s++ ]) == 0x81)
- {};
- while ((d = b64dec[ (unsigned)*s++ ]) == 0x81)
- {};
-
-if (_debug)
-fprintf(stderr, "%7u %02x %02x %02x %02x -> %02x %02x %02x\n",
-(unsigned)ns, a, b, c, d,
-(((a << 2) | (b >> 4)) & 0xff),
-(((b << 4) | (c >> 2)) & 0xff),
-(((c << 6) | d) & 0xff));
-
- ns -= 4;
- *te++ = (a << 2) | (b >> 4);
- if (s[-2] == '=') break;
- *te++ = (b << 4) | (c >> 2);
- if (s[-1] == '=') break;
- *te++ = (c << 6) | d;
+ while (ns > 0)
+ {
+ /* Get next 4 characters, ignoring whitespace. */
+ while ((a = b64dec[ (unsigned)*s++ ]) == 0x81)
+ ;
+ while ((b = b64dec[ (unsigned)*s++ ]) == 0x81)
+ ;
+ while ((c = b64dec[ (unsigned)*s++ ]) == 0x81)
+ ;
+ while ((d = b64dec[ (unsigned)*s++ ]) == 0x81)
+ ;
+
+ ns -= 4;
+ *te++ = (a << 2) | (b >> 4);
+ if (s[-2] == '=') break;
+ *te++ = (b << 4) | (c >> 2);
+ if (s[-1] == '=') break;
+ *te++ = (c << 6) | d;
}
- if (ns != 0) { /* XXX can't happen, just in case */
- if (t) free((void *)t);
- return 1;
+ if (ns != 0)
+ { /* XXX can't happen, just in case */
+ if (t) free((void *)t);
+ return 1;
}
if (lenp)
- *lenp = (te - t);
+ *lenp = (te - t);
if (datap)
- *datap = (void *)t;
+ *datap = (void *)t;
else
- if (t) free((void *)t);
+ if (t) free((void *)t);
return 0;
}
-/*@=globs =internalglobs =modfilesys @*/
-/*@=type@*/
/*!\file base64.h
* \brief Base64 encoding and decoding, headers.
- * \author Bob Deblier <bob@virtualunlimited.com>
+ * \author Bob Deblier <bob.deblier@pandora.be>
*/
#ifndef _BASE64_H
#define _BASE64_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
-/**
+/*!\
* Decode white space character set (default).
*/
-/*@-exportlocal@*/
-/*@unchecked@*/ /*@observer@*/ /*@null@*/
-extern const char * b64decode_whitespace;
-/*@=exportlocal@*/
+extern const char* b64decode_whitespace;
#define B64DECODE_WHITESPACE " \f\n\r\t\v"
-/**
+/*!\
* Encode 72 characters per line (default).
*/
-/*@-exportlocal@*/
-/*@unchecked@*/
extern int b64encode_chars_per_line;
-/*@=exportlocal@*/
#define B64ENCODE_CHARS_PER_LINE 72
-/**
+/*!\
* Encode end-of-line string (default).
*/
-/*@-exportlocal@*/
-/*@unchecked@*/ /*@observer@*/ /*@null@*/
-extern const char * b64encode_eolstr;
-/*@=exportlocal@*/
+extern const char* b64encode_eolstr;
#define B64ENCODE_EOLSTR "\n"
#ifdef __cplusplus
extern "C" {
#endif
-/**
+/*!
* Encode chunks of 3 bytes of binary input into 4 bytes of base64 output.
- * @param data binary data
- * @param ns no. bytes of data (0 uses strlen(data))
- * @return (malloc'd) base64 string
+ * \param data binary data
+ * \param ns no. bytes of data (0 uses strlen(data))
+ * \return (malloc'd) base64 string
*/
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
-char * b64encode (const void * data, size_t ns)
- /*@*/;
+BEECRYPTAPI
+char* b64encode(const void* data, size_t ns);
-/**
+/*!
* Encode crc of binary input data into 5 bytes of base64 output.
- * @param data binary data
- * @param ns no. bytes of binary data
- * @return (malloc'd) base64 string
+ * \param data binary data
+ * \param ns no. bytes of binary data
+ * \return (malloc'd) base64 string
*/
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
-char * b64crc (const unsigned char * data, size_t ns)
- /*@*/;
+BEECRYPTAPI
+char* b64crc(const unsigned char* data, size_t ns);
-/**
+/*!
* Decode chunks of 4 bytes of base64 input into 3 bytes of binary output.
- * @param s base64 string
- * @retval datap address of (malloc'd) binary data
- * @retval lenp address of no. bytes of binary data
- * @return 0 on success, 1: s == NULL, 2: bad length, 3: bad char
+ * \param s base64 string
+ * \retval datap address of (malloc'd) binary data
+ * \retval lenp address of no. bytes of binary data
+ * \return 0 on success, 1: s == NULL, 2: bad length, 3: bad char
*/
-BEECRYPTAPI /*@unused@*/
-int b64decode (const char * s, /*@out@*/ void ** datap, /*@out@*/ size_t *lenp)
- /*@modifies *datap, *lenp @*/;
+BEECRYPTAPI
+int b64decode(const char* s, void** datap, size_t* lenp);
-/**
+/*!
*/
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
+BEECRYPTAPI
char* b64enc(const memchunk*);
-/**
+/*!
*/
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
+BEECRYPTAPI
memchunk* b64dec(const char*);
#ifdef __cplusplus
-/*@-compdef -sizeoftype@*/
/*
* Copyright (c) 1999, 2000, 2001, 2002 Virtual Unlimited B.V.
*
* \ingroup ES_m PRNG_m HASH_m HMAC_m BC_m
*/
-#include "system.h"
-#include "beecrypt.h"
+#define BEECRYPT_DLL_EXPORT
-#include "entropy.h"
-#include "fips186.h"
-#include "hmacmd5.h"
-#include "hmacsha1.h"
-#include "hmacsha256.h"
-#include "md5.h"
-#include "mp.h"
-#include "mtprng.h"
-#include "sha1.h"
-#include "sha256.h"
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/beecrypt.h"
+
+#include "beecrypt/entropy.h"
-#include "aes.h"
-#include "blowfish.h"
-#include "blockmode.h"
+#include "beecrypt/fips186.h"
+#include "beecrypt/mtprng.h"
-#include "debug.h"
+#include "beecrypt/md5.h"
+#include "beecrypt/sha1.h"
+#include "beecrypt/sha256.h"
+
+#include "beecrypt/hmacmd5.h"
+#include "beecrypt/hmacsha1.h"
+#include "beecrypt/hmacsha256.h"
+
+#include "beecrypt/aes.h"
+#include "beecrypt/blowfish.h"
+#include "beecrypt/blockmode.h"
-/*@observer@*/ /*@unchecked@*/
static entropySource entropySourceList[] =
{
#if WIN32
{
return entropySourceList+0;
}
- else
- {
- return (const entropySource*) 0;
- }
+ return (const entropySource*) 0;
}
int entropyGatherNext(byte* data, size_t size)
return -1;
}
-/*@observer@*/ /*@unchecked@*/
static const randomGenerator* randomGeneratorList[] =
{
&fips186prng,
if ((index < 0) || (index >= RANDOMGENERATORS))
return (const randomGenerator*) 0;
- /*@-compmempass@*/
return randomGeneratorList[index];
- /*@=compmempass@*/
}
const randomGenerator* randomGeneratorFind(const char* name)
for (index = 0; index < RANDOMGENERATORS; index++)
{
if (strcmp(name, randomGeneratorList[index]->name) == 0)
- /*@-compmempass@*/
return randomGeneratorList[index];
- /*@=compmempass@*/
}
return (const randomGenerator*) 0;
}
if (selection)
return randomGeneratorFind(selection);
else
- /*@-compmempass @*/
return &fips186prng;
- /*@=compmempass @*/
}
int randomGeneratorContextInit(randomGeneratorContext* ctxt, const randomGenerator* rng)
return -1;
ctxt->rng = rng;
- ctxt->param = (randomGeneratorParam*) calloc(rng->paramsize, 1);
- /*@-nullstate@*/ /* FIX: ctxt->param may be NULL */
- if (ctxt->param == (randomGeneratorParam*) 0)
- return -1;
+ if (rng->paramsize)
+ {
+ ctxt->param = (randomGeneratorParam*) calloc(rng->paramsize, 1);
+ if (ctxt->param == (randomGeneratorParam*) 0)
+ return -1;
+ }
+ else
+ ctxt->param = (randomGeneratorParam*) 0;
return ctxt->rng->setup(ctxt->param);
- /*@=nullstate@*/
}
int randomGeneratorContextFree(randomGeneratorContext* ctxt)
{
- register int rc;
+ register int rc = 0;
- /*@-mustfree@*/
if (ctxt == (randomGeneratorContext*) 0)
return -1;
if (ctxt->rng == (randomGenerator*) 0)
return -1;
- if (ctxt->param == (randomGeneratorParam*) 0)
- return -1;
- /*@=mustfree@*/
-
- rc = ctxt->rng->cleanup(ctxt->param);
+ if (ctxt->rng->paramsize)
+ {
+ if (ctxt->param == (randomGeneratorParam*) 0)
+ return -1;
+
+ rc = ctxt->rng->cleanup(ctxt->param);
- free(ctxt->param);
+ free(ctxt->param);
- ctxt->param = (randomGeneratorParam*) 0;
+ ctxt->param = (randomGeneratorParam*) 0;
+ }
- /*@-nullstate@*/ /* FIX: ctxt->param may be NULL */
return rc;
- /*@=nullstate@*/
}
int randomGeneratorContextNext(randomGeneratorContext* ctxt, byte* data, size_t size)
return ctxt->rng->next(ctxt->param, data, size);
}
-/*@observer@*/ /*@unchecked@*/
+int randomGeneratorContextSeed(randomGeneratorContext* ctxt, const byte* data, size_t size)
+{
+ return ctxt->rng->seed(ctxt->param, data, size);
+}
+
static const hashFunction* hashFunctionList[] =
{
&md5,
if (selection)
return hashFunctionFind(selection);
else
- /*@-compmempass @*/
return &sha1;
- /*@=compmempass @*/
}
const hashFunction* hashFunctionGet(int index)
if ((index < 0) || (index >= HASHFUNCTIONS))
return (const hashFunction*) 0;
- /*@-compmempass@*/
return hashFunctionList[index];
- /*@=compmempass@*/
}
const hashFunction* hashFunctionFind(const char* name)
for (index = 0; index < HASHFUNCTIONS; index++)
{
if (strcmp(name, hashFunctionList[index]->name) == 0)
- /*@-compmempass@*/
return hashFunctionList[index];
- /*@=compmempass@*/
}
return (const hashFunction*) 0;
}
ctxt->algo = hash;
ctxt->param = (hashFunctionParam*) calloc(hash->paramsize, 1);
- /*@-nullstate@*/ /* FIX: ctxt->param may be NULL */
if (ctxt->param == (hashFunctionParam*) 0)
return -1;
return ctxt->algo->reset(ctxt->param);
- /*@=nullstate@*/
}
int hashFunctionContextFree(hashFunctionContext* ctxt)
{
- /*@-mustfree@*/
if (ctxt == (hashFunctionContext*) 0)
return -1;
if (ctxt->param == (hashFunctionParam*) 0)
return -1;
- /*@=mustfree@*/
free(ctxt->param);
ctxt->param = (hashFunctionParam*) 0;
- /*@-nullstate@*/ /* FIX: ctxt->param may be NULL */
return 0;
- /*@=nullstate@*/
}
int hashFunctionContextReset(hashFunctionContext* ctxt)
if (n != (mpnumber*) 0)
{
int rc;
- byte* tmp = (byte*) malloc(MP_WORDS_TO_BYTES(n->size) + 1);
+
+ /* get the number of significant bits in the number */
+ size_t sig = mpbits(n->size, n->data);
+
+ /* calculate how many bytes we need for a java-style encoding;
+ * if the most significant bit of the most significant byte
+ * is set, then we need to prefix a zero byte.
+ */
+ size_t req = ((sig+7) >> 3) + (((sig&7) == 0) ? 1 : 0);
+
+ byte* tmp = (byte*) malloc(req);
if (tmp == (byte*) 0)
return -1;
- if (mpmsbset(n->size, n->data))
- {
- tmp[0] = 0;
- (void) i2osp(tmp+1, MP_WORDS_TO_BYTES(n->size), n->data, n->size);
- rc = ctxt->algo->update(ctxt->param, tmp, MP_WORDS_TO_BYTES(n->size) + 1);
- }
- else
- {
- (void) i2osp(tmp, MP_WORDS_TO_BYTES(n->size), n->data, n->size);
- rc = ctxt->algo->update(ctxt->param, tmp, MP_WORDS_TO_BYTES(n->size));
- }
+ i2osp(tmp, req, n->data, n->size);
+
+ rc = ctxt->algo->update(ctxt->param, tmp, req);
+
free(tmp);
return rc;
mpnfree(&match);
- /*@-mustfree@*/ /* dig.data is OK */
return rc;
- /*@=mustfree@*/
}
-/*@observer@*/ /*@unchecked@*/
static const keyedHashFunction* keyedHashFunctionList[] =
{
&hmacmd5,
if (selection)
return keyedHashFunctionFind(selection);
else
- /*@-compmempass @*/
return &hmacsha1;
- /*@=compmempass @*/
}
const keyedHashFunction* keyedHashFunctionGet(int index)
if ((index < 0) || (index >= KEYEDHASHFUNCTIONS))
return (const keyedHashFunction*) 0;
- /*@-compmempass@*/
return keyedHashFunctionList[index];
- /*@=compmempass@*/
}
const keyedHashFunction* keyedHashFunctionFind(const char* name)
for (index = 0; index < KEYEDHASHFUNCTIONS; index++)
{
if (strcmp(name, keyedHashFunctionList[index]->name) == 0)
- /*@-compmempass@*/
return keyedHashFunctionList[index];
- /*@=compmempass@*/
}
return (const keyedHashFunction*) 0;
}
ctxt->algo = mac;
ctxt->param = (keyedHashFunctionParam*) calloc(mac->paramsize, 1);
- /*@-nullstate@*/ /* FIX: ctxt->param may be NULL */
if (ctxt->param == (keyedHashFunctionParam*) 0)
return -1;
return ctxt->algo->reset(ctxt->param);
- /*@=nullstate@*/
}
int keyedHashFunctionContextFree(keyedHashFunctionContext* ctxt)
{
- /*@-mustfree@*/
if (ctxt == (keyedHashFunctionContext*) 0)
return -1;
if (ctxt->param == (keyedHashFunctionParam*) 0)
return -1;
- /*@=mustfree@*/
free(ctxt->param);
ctxt->param = (keyedHashFunctionParam*) 0;
- /*@-nullstate@*/ /* FIX: ctxt->param may be NULL */
return 0;
- /*@=nullstate@*/
}
int keyedHashFunctionContextSetup(keyedHashFunctionContext* ctxt, const byte* key, size_t keybits)
if (n != (mpnumber*) 0)
{
- register int rc;
- register byte* temp = (byte*) malloc(MP_WORDS_TO_BYTES(n->size)+1);
- if (temp == (byte*) 0)
+ int rc;
+
+ /* get the number of significant bits in the number */
+ size_t sig = mpbits(n->size, n->data);
+
+ /* calculate how many bytes we need a java-style encoding; if the
+ * most significant bit of the most significant byte is set, then
+ * we need to prefix a zero byte.
+ */
+ size_t req = ((sig+7) >> 3) + (((sig&7) == 0) ? 1 : 0);
+
+ byte* tmp = (byte*) malloc(req);
+
+ if (tmp == (byte*) 0)
return -1;
- if (mpmsbset(n->size, n->data))
- {
- temp[0] = 0;
- (void) i2osp(temp+1, MP_WORDS_TO_BYTES(n->size), n->data, n->size);
- rc = ctxt->algo->update(ctxt->param, temp, MP_WORDS_TO_BYTES(n->size)+1);
- }
- else
- {
- (void) i2osp(temp, MP_WORDS_TO_BYTES(n->size), n->data, n->size);
- rc = ctxt->algo->update(ctxt->param, temp, MP_WORDS_TO_BYTES(n->size));
- }
- free(temp);
+ i2osp(tmp, req, n->data, n->size);
+
+ rc = ctxt->algo->update(ctxt->param, tmp, req);
+
+ free(tmp);
return rc;
}
return ctxt->algo->digest(ctxt->param, digest);
}
-int keyedHashFunctionContextDigestMP(keyedHashFunctionContext* ctxt, const mpnumber* d)
+int keyedHashFunctionContextDigestMP(keyedHashFunctionContext* ctxt, mpnumber* d)
{
if (ctxt == (keyedHashFunctionContext*) 0)
return -1;
mpnfree(&match);
- /*@-mustfree@*/ /* dig.data is OK */
return rc;
- /*@=mustfree@*/
}
-/*@observer@*/ /*@unchecked@*/
static const blockCipher* blockCipherList[] =
{
&aes,
if (selection)
return blockCipherFind(selection);
else
- /*@-compmempass @*/
return &aes;
- /*@=compmempass @*/
}
const blockCipher* blockCipherGet(int index)
if ((index < 0) || (index >= BLOCKCIPHERS))
return (const blockCipher*) 0;
- /*@-compmempass@*/
return blockCipherList[index];
- /*@=compmempass@*/
}
const blockCipher* blockCipherFind(const char* name)
for (index = 0; index < BLOCKCIPHERS; index++)
{
if (strcmp(name, blockCipherList[index]->name) == 0)
- /*@-compmempass@*/
return blockCipherList[index];
- /*@=compmempass@*/
}
return (const blockCipher*) 0;
ctxt->param = (blockCipherParam*) calloc(ciph->paramsize, 1);
ctxt->op = NOCRYPT;
- /*@-nullstate@*/ /* FIX: ctxt->param may be NULL */
if (ctxt->param == (blockCipherParam*) 0)
return -1;
return 0;
- /*@=nullstate@*/
}
int blockCipherContextSetup(blockCipherContext* ctxt, const byte* key, size_t keybits, cipherOperation op)
int blockCipherContextFree(blockCipherContext* ctxt)
{
- /*@-mustfree@*/
if (ctxt == (blockCipherContext*) 0)
return -1;
if (ctxt->param == (blockCipherParam*) 0)
return -1;
- /*@=mustfree@*/
free(ctxt->param);
ctxt->param = (blockCipherParam*) 0;
- /*@-nullstate@*/ /* FIX: ctxt->param is NULL */
return 0;
- /*@=nullstate@*/
}
-int blockCipherContextECB(blockCipherContext* ctxt, uint32_t* dst, const uint32_t* src, size_t nblocks)
+int blockCipherContextECB(blockCipherContext* ctxt, uint32_t* dst, const uint32_t* src, int nblocks)
{
switch (ctxt->op)
{
case NOCRYPT:
-/*@-mayaliasunique@*/
memcpy(dst, src, nblocks * ctxt->algo->blocksize);
-/*@=mayaliasunique@*/
return 0;
- /*@notreached@*/ break;
case ENCRYPT:
return (ctxt->algo->ecb.encrypt) ?
ctxt->algo->ecb.encrypt(ctxt->param, dst, src, nblocks) :
blockEncryptECB(ctxt->algo, ctxt->param, dst, src, nblocks);
- /*@notreached@*/ break;
case DECRYPT:
return (ctxt->algo->ecb.decrypt) ?
ctxt->algo->ecb.decrypt(ctxt->param, dst, src, nblocks) :
blockDecryptECB(ctxt->algo, ctxt->param, dst, src, nblocks);
- /*@notreached@*/ break;
}
- /*@notreached@*/
return -1;
}
-int blockCipherContextCBC(blockCipherContext* ctxt, uint32_t* dst, const uint32_t* src, size_t nblocks)
+int blockCipherContextCBC(blockCipherContext* ctxt, uint32_t* dst, const uint32_t* src, int nblocks)
{
switch (ctxt->op)
{
case NOCRYPT:
-/*@-mayaliasunique@*/
memcpy(dst, src, nblocks * ctxt->algo->blocksize);
-/*@=mayaliasunique@*/
return 0;
- /*@notreached@*/ break;
case ENCRYPT:
return (ctxt->algo->cbc.encrypt) ?
ctxt->algo->cbc.encrypt(ctxt->param, dst, src, nblocks) :
blockEncryptCBC(ctxt->algo, ctxt->param, dst, src, nblocks);
- /*@notreached@*/ break;
case DECRYPT:
return (ctxt->algo->cbc.decrypt) ?
ctxt->algo->cbc.decrypt(ctxt->param, dst, src, nblocks) :
blockDecryptCBC(ctxt->algo, ctxt->param, dst, src, nblocks);
- /*@notreached@*/ break;
}
- /*@notreached@*/
return -1;
}
#if WIN32
__declspec(dllexport)
-BOOL WINAPI DllMain(HINSTANCE hInst, DWORD wDataSeg, LPVOID lpReserved)
+BOOL WINAPI DllMain(HINSTANCE hInst, DWORD fdwReason, LPVOID lpReserved)
{
- switch (wDataSeg)
+ switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
entropy_provider_setup(hInst);
entropy_provider_cleanup();
break;
}
- return TRUE;
+
+ return TRUE;
}
#endif
-/*@=compdef =sizeoftype@*/
#ifndef _BEECRYPT_H
#define _BEECRYPT_H
-#include "beecrypt.api.h"
+#include "beecrypt/api.h"
-#include "memchunk.h"
-#include "mpnumber.h"
-#include "mp.h"
+#include "beecrypt/memchunk.h"
+#include "beecrypt/mpnumber.h"
-/** \name Entropy sources */
-/*@{*/
+/*
+ * Entropy Sources
+ */
-/** \ingroup ES_m
- * Return an array of 32-bit unsigned integers of given size with
- * entropy data.
- *
- * @retval data entropy data
- * @param size no. of ints of data
- * @return 0 on success, -1 on failure
+/*!\typedef entropyNext
+ * \brief Prototype definition for an entropy-generating function.
+ * \ingroup ES_m
*/
-typedef int (*entropyNext) (/*@out@*/ byte* data, size_t size)
- /*@modifies data @*/;
+typedef int (*entropyNext)(byte*, size_t);
-/** \ingroup ES_m
- * Methods and parameters for entropy sources.
- * Each specific entropy source MUST be written to be multithread-safe.
+/*!\brief This struct holds information and pointers to code specific to each
+ * source of entropy.
+ * \ingroup ES_m
*/
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI entropySource
+#else
+struct _entropySource
+#endif
{
-/*@observer@*/
- const char* name; /*!< entropy source name */
-/*@unused@*/
- const entropyNext next; /*!< return entropy function */
-} entropySource;
+ /*!\var name
+ * \brief The entropy source's name.
+ */
+ const char* name;
+ /*!\var next
+ * \brief Points to the function which produces the entropy.
+ */
+ const entropyNext next;
+};
+
+#ifndef __cplusplus
+typedef struct _entropySource entropySource;
+#endif
#ifdef __cplusplus
extern "C" {
#endif
-/** \ingroup ES_m
- * Return the number of entropy sources available.
- * @return number of entropy sources available
+/*!\fn int entropySourceCount()
+ * \brief This function returns the number of entropy sources implemented by
+ * the library.
+ * \return The number of implemented entropy sources.
*/
-BEECRYPTAPI /*@unused@*/
-int entropySourceCount(void)
- /*@*/;
+BEECRYPTAPI
+int entropySourceCount(void);
-/** \ingroup ES_m
- * Retrieve a entropy source by index.
- * @param n entropy source index
- * @return entropy source pointer (or NULL)
+/*!\fn const entropySource* entropySourceGet(int n)
+ * \brief This function returns the \a n -th entropy source implemented by
+ * the library.
+ * \param n Index of the requested entropy source; legal values are 0
+ * through entropySourceCount() - 1.
+ * \return A pointer to an entropy source or null, if the index was out of
+ * range.
*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const entropySource* entropySourceGet(int n)
- /*@*/;
+BEECRYPTAPI
+const entropySource* entropySourceGet(int n);
-/** \ingroup ES_m
- * Retrieve a entropy source by name.
- * @param name entropy source name
- * @return entropy source pointer (or NULL)
+/*!\fn const entropySource* entropySourceFind(const char* name)
+ * \brief This function returns the entropy source specified by the given name.
+ * \param name Name of the requested entropy source.
+ * \return A pointer to an entropy source or null, if the name wasn't found.
*/
-/*@-exportlocal@*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/
-const entropySource* entropySourceFind(const char* name)
- /*@*/;
-/*@=exportlocal@*/
+BEECRYPTAPI
+const entropySource* entropySourceFind(const char* name);
-/** \ingroup ES_m
- * Retrieve the default entropy source.
- * If the BEECRYPT_ENTROPY environment variable is set, use that
- * entropy source. Otherwise, use the 1st entry in the internal table.
- * @return entropy source pointer (or NULL)
+/*!\fn const entropySource* entropySourceDefault()
+ * \brief This functions returns the default entropy source; the default value
+ * can be specified by setting environment variable BEECRYPT_ENTROPY.
+ * \return A pointer to an entropy source or null, in case an error occured.
*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const entropySource* entropySourceDefault(void)
- /*@*/;
+BEECRYPTAPI
+const entropySource* entropySourceDefault(void);
-/** \ingroup ES_m
- * Gather entropy from multiple sources (if BEECRYPT_ENTROPY is not set).
+/*!\fn int entropyGatherNext(byte* data, size_t size)
+ * \brief This function gathers \a size bytes of entropy into \a data.
*
- * @retval data entropy data
- * @param size no. of ints of data
- * @return 0 on success, -1 on failure
+ * Unless environment variable BEECRYPT_ENTROPY is set, this function will
+ * try each successive entropy source to gather up the requested amount.
+ *
+ * \param data Points to where the entropy should be stored.
+ * \param size Indicates how many bytes of entropy should be gathered.
+ * \retval 0 On success.
+ * \retval -1 On failure.
*/
BEECRYPTAPI
-int entropyGatherNext(byte* data, size_t size)
- /*@*/;
+int entropyGatherNext(byte*, size_t);
#ifdef __cplusplus
}
#endif
-/*@}*/
-/** \name Pseudo-random Number Generators */
-/*@{*/
-
-/** \ingroup PRNG_m
- */
-typedef void randomGeneratorParam;
-
-/** \ingroup PRNG_m
- * Initialize the parameters for use, and seed the generator
- * with entropy from the default entropy source.
- *
- * @param param generator parameters
- * @return 0 on success, -1 on failure
- */
-typedef int (*randomGeneratorSetup) (randomGeneratorParam* param)
- /*@modifies *param @*/;
-
-/** \ingroup PRNG_m
- * Re-seed the random generator with user-provided entropy.
- *
- * @param param generator parameters
- * @param data user entropy
- * @param size no. of ints of entropy
- * @return 0 on success, -1 on failure
+/*
+ * Pseudo-random Number Generators
*/
-typedef int (*randomGeneratorSeed) (randomGeneratorParam* param, const byte* data, size_t size)
- /*@modifies *param @*/;
-/** \ingroup PRNG_m
- * Return an array of 32-bit unsigned integers of given size with
- * pseudo-random data.
- *
- * @param param generator parameters
- * @retval data pseudo-random data
- * @param size no. of ints of data
- * @return 0 on success, -1 on failure
- */
-typedef int (*randomGeneratorNext) (randomGeneratorParam* param, /*@out@*/ byte* data, size_t size)
- /*@modifies *param, *data @*/;
+typedef void randomGeneratorParam;
-/** \ingroup PRNG_m
- * Cleanup after using a generator.
- *
- * @param param generator parameters
- * @return 0 on success, -1 on failure
- */
-typedef int (*randomGeneratorCleanup) (randomGeneratorParam* param)
- /*@modifies *param @*/;
+typedef int (*randomGeneratorSetup )(randomGeneratorParam*);
+typedef int (*randomGeneratorSeed )(randomGeneratorParam*, const byte*, size_t);
+typedef int (*randomGeneratorNext )(randomGeneratorParam*, byte*, size_t);
+typedef int (*randomGeneratorCleanup)(randomGeneratorParam*);
-/** \ingroup PRNG_m
- * Methods and parameters for random generators.
- * Each specific random generator MUST be written to be multithread safe.
+/*
+ * The struct 'randomGenerator' holds information and pointers to code specific
+ * to each random generator. Each specific random generator MUST be written to
+ * be multithread safe.
*
- * @warning Each randomGenerator, when used in cryptographic applications, MUST
+ * WARNING: each randomGenerator, when used in cryptographic applications, MUST
* be guaranteed to be of suitable quality and strength (i.e. don't use the
* random() function found in most UN*X-es).
*
* field.
*
*/
-typedef struct
-{
-/*@observer@*/
- const char* name; /*!< random generator name */
- const size_t paramsize;
- const randomGeneratorSetup setup;
- const randomGeneratorSeed seed;
- const randomGeneratorNext next;
- const randomGeneratorCleanup cleanup;
-} randomGenerator;
+/*!\brief This struct holds information and pointers to code specific to each
+ * pseudo-random number generator.
+ * \ingroup PRNG_m
+ */
#ifdef __cplusplus
-extern "C" {
+struct BEECRYPTAPI randomGenerator
+#else
+struct _randomGenerator
+#endif
+{
+ /*!\var name
+ * \brief The random generator's name.
+ */
+ const char* name;
+ /*!\var paramsize
+ * \brief The size of the random generator's parameters.
+ * \note The implementor should set this by using sizeof(<struct holding
+ * random generator's parameters>).
+ */
+ const size_t paramsize;
+ /*!\var setup
+ * \brief Points to the setup function.
+ */
+ const randomGeneratorSetup setup;
+ /*!\var seed
+ * \brief Points to the seeding function.
+ */
+ const randomGeneratorSeed seed;
+ /*!\var seed
+ * \brief Points to the function which generates the random data.
+ */
+ const randomGeneratorNext next;
+ /*!\var seed
+ * \brief Points to the cleanup function.
+ */
+ const randomGeneratorCleanup cleanup;
+};
+
+#ifndef __cplusplus
+typedef struct _randomGenerator randomGenerator;
#endif
-/** \ingroup PRNG_m
- * Return the number of generators available.
- * @return number of generators available
- */
-BEECRYPTAPI /*@unused@*/
-int randomGeneratorCount(void)
- /*@*/;
-
-/** \ingroup PRNG_m
- * Retrieve a generator by index.
- * @param index generator index
- * @return generator pointer (or NULL)
+/*
+ * You can use the following functions to find random generators implemented by
+ * the library:
+ *
+ * randomGeneratorCount returns the number of generators available.
+ *
+ * randomGeneratorGet returns the random generator with a given index (starting
+ * at zero, up to randomGeneratorCount() - 1), or NULL if the index was out of
+ * bounds.
+ *
+ * randomGeneratorFind returns the random generator with the given name, or
+ * NULL if no random generator exists with that name.
*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const randomGenerator* randomGeneratorGet(int index)
- /*@*/;
-/** \ingroup PRNG_m
- * Retrieve a generator by name.
- * @param name generator name
- * @return generator pointer (or NULL)
- */
-/*@-exportlocal@*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/
-const randomGenerator* randomGeneratorFind(const char* name)
- /*@*/;
-/*@=exportlocal@*/
+#ifdef __cplusplus
+extern "C" {
+#endif
-/** \ingroup PRNG_m
- * Retrieve the default generator.
- * If the BEECRYPT_RANDOM environment variable is set, use that
- * generator. Otherwise, use "fips186prng".
- * @return generator pointer
- */
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const randomGenerator* randomGeneratorDefault(void)
- /*@*/;
+BEECRYPTAPI
+int randomGeneratorCount(void);
+BEECRYPTAPI
+const randomGenerator* randomGeneratorGet(int);
+BEECRYPTAPI
+const randomGenerator* randomGeneratorFind(const char*);
+BEECRYPTAPI
+const randomGenerator* randomGeneratorDefault(void);
#ifdef __cplusplus
}
#endif
-/** \ingroup PRNG_m
- * A randomGenerator instance, global functions and specific parameters.
+/*
+ * The struct 'randomGeneratorContext' is used to contain both the functional
+ * part (the randomGenerator), and its parameters.
*/
-typedef struct
-{
-/*@observer@*/ /*@dependent@*/
- const randomGenerator* rng; /*!< global functions and parameters */
-/*@only@*/
- randomGeneratorParam* param; /*!< specific parameters */
-} randomGeneratorContext;
#ifdef __cplusplus
-extern "C" {
+struct BEECRYPTAPI randomGeneratorContext
+#else
+struct _randomGeneratorContext
+#endif
+{
+ const randomGenerator* rng;
+ randomGeneratorParam* param;
+
+ #ifdef __cplusplus
+ randomGeneratorContext();
+ randomGeneratorContext(const randomGenerator*);
+ ~randomGeneratorContext();
+ #endif
+};
+
+#ifndef __cplusplus
+typedef struct _randomGeneratorContext randomGeneratorContext;
#endif
-/** \ingroup PRNG_m
- * Initialize a randomGenerator instance.
+/*
+ * The following functions can be used to initialize and free a
+ * randomGeneratorContext. Initializing will allocate a buffer of the size
+ * required by the randomGenerator, freeing will deallocate that buffer.
*/
-BEECRYPTAPI /*@unused@*/
-int randomGeneratorContextInit(/*@special@*/ /*@null@*/ randomGeneratorContext* ctxt, /*@observer@*/ /*@dependent@*/ /*@null@*/ const randomGenerator* rng)
- /*@defines ctxt->rng, ctxt->param @*/
- /*@modifies ctxt->rng, ctxt->param @*/;
-/** \ingroup PRNG_m
- * Destroy a randomGenerator instance.
- */
-BEECRYPTAPI /*@unused@*/
-int randomGeneratorContextFree(/*@special@*/ randomGeneratorContext* ctxt)
- /*@uses ctxt->rng @*/
- /*@releases ctxt->param @*/
- /*@modifies ctxt->rng, ctxt->param @*/;
+#ifdef __cplusplus
+extern "C" {
+#endif
-BEECRYPTAPI /*@unused@*/
-int randomGeneratorContextNext(randomGeneratorContext* ctxt, /*@out@*/ byte* data, size_t size)
- /*@modifies ctxt->param, *data @*/;
+BEECRYPTAPI
+int randomGeneratorContextInit(randomGeneratorContext*, const randomGenerator*);
+BEECRYPTAPI
+int randomGeneratorContextFree(randomGeneratorContext*);
+BEECRYPTAPI
+int randomGeneratorContextNext(randomGeneratorContext*, byte*, size_t);
+BEECRYPTAPI
+int randomGeneratorContextSeed(randomGeneratorContext*, const byte*, size_t);
#ifdef __cplusplus
}
#endif
-/*@}*/
-/** \name Hash Functions */
-/*@{*/
+/*
+ * Hash Functions
+ */
-/** \ingroup HASH_m
+/*!typedef void hashFunctionParam
+ * \ingroup HASH_m
*/
-BEECRYPTAPI
typedef void hashFunctionParam;
-/** \ingroup HASH_m
- * Re-initialize the parameters of the hash function.
- *
- * @param param hash parameters
- * @return 0 on success, -1 on failure
- */
-typedef int (*hashFunctionReset) (hashFunctionParam* param)
- /*@modifies *param @*/;
+typedef int (*hashFunctionReset )(hashFunctionParam*);
+typedef int (*hashFunctionUpdate)(hashFunctionParam*, const byte*, size_t);
+typedef int (*hashFunctionDigest)(hashFunctionParam*, byte*);
-/** \ingroup HASH_m
- * Update the hash function with an array of bytes.
+/*
+ * The struct 'hashFunction' holds information and pointers to code specific
+ * to each hash function. Specific hash functions MAY be written to be
+ * multithread-safe.
*
- * @param param hash parameters
- * @param data array of bytes
- * @param size no. of bytes
- * @return 0 on success, -1 on failure
+ * NOTE: data MUST have a size (in bytes) of at least 'digestsize' as described
+ * in the hashFunction struct.
+ * NOTE: for safety reasons, after calling digest, each specific implementation
+ * MUST reset itself so that previous values in the parameters are erased.
*/
-typedef int (*hashFunctionUpdate) (hashFunctionParam* param, const byte* data, size_t size)
- /*@modifies *param @*/;
+#ifdef __cplusplus
+struct BEECRYPTAPI hashFunction
+#else
+struct _hashFunction
+#endif
+{
+ const char* name;
+ const size_t paramsize; /* in bytes */
+ const size_t blocksize; /* in bytes */
+ const size_t digestsize; /* in bytes */
+ const hashFunctionReset reset;
+ const hashFunctionUpdate update;
+ const hashFunctionDigest digest;
+};
+
+#ifndef __cplusplus
+typedef struct _hashFunction hashFunction;
+#endif
-/** \ingroup HASH_m
- * Compute the digest of all the data passed to the hash function, and return
- * the result in data.
+/*
+ * You can use the following functions to find hash functions implemented by
+ * the library:
*
- * @note data must be at least have a bytesize of 'digestsize' as described
- * in the hashFunction struct.
+ * hashFunctionCount returns the number of hash functions available.
*
- * @note For safety reasons, after calling digest, each specific implementation
- * MUST reset itself so that previous values in the parameters are erased.
+ * hashFunctionGet returns the hash function with a given index (starting
+ * at zero, up to hashFunctionCount() - 1), or NULL if the index was out of
+ * bounds.
*
- * @param param hash parameters
- * @retval data digest
- * @return 0 on success, -1 on failure
+ * hashFunctionFind returns the hash function with the given name, or
+ * NULL if no hash function exists with that name.
*/
-typedef int (*hashFunctionDigest) (hashFunctionParam* param, /*@out@*/ byte* data)
- /*@modifies *param, *data @*/;
-
-/** \ingroup HASH_m
- * Methods and parameters for hash functions.
- * Specific hash functions MAY be written to be multithread-safe.
- */
-typedef struct
-{
-/*@observer@*/
- const char* name; /*!< hash function name */
- const size_t paramsize; /*!< in bytes */
- const size_t blocksize; /*!< in bytes */
- const size_t digestsize; /*!< in bytes */
- const hashFunctionReset reset;
- const hashFunctionUpdate update;
- const hashFunctionDigest digest;
-} hashFunction;
#ifdef __cplusplus
extern "C" {
#endif
-/** \ingroup HASH_m
- * Return the number of hash functions available.
- * @return number of hash functions available
- */
-BEECRYPTAPI /*@unused@*/
-int hashFunctionCount(void)
- /*@*/;
-
-/** \ingroup HASH_m
- * Retrieve a hash function by index.
- * @param index hash function index
- * @return hash function pointer (or NULL)
- */
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const hashFunction* hashFunctionGet(int index)
- /*@*/;
-
-/** \ingroup HASH_m
- * Retrieve a hash function by name.
- * @param name hash function name
- * @return hash function pointer (or NULL)
- */
-/*@-exportlocal@*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/
-const hashFunction* hashFunctionFind(const char* name)
- /*@*/;
-/*@=exportlocal@*/
-
-/** \ingroup HASH_m
- * Retrieve the default hash function.
- * If the BEECRYPT_HASH environment variable is set, use that
- * hash function. Otherwise, use "sha1".
- * @return hash function pointer (or NULL)
- */
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const hashFunction* hashFunctionDefault(void)
- /*@*/;
+BEECRYPTAPI
+int hashFunctionCount(void);
+BEECRYPTAPI
+const hashFunction* hashFunctionGet(int);
+BEECRYPTAPI
+const hashFunction* hashFunctionFind(const char*);
+BEECRYPTAPI
+const hashFunction* hashFunctionDefault(void);
#ifdef __cplusplus
}
#endif
-/** \ingroup HASH_m
- * A hashFunction instance, global functions and specific parameters.
+/*
+ * The struct 'hashFunctionContext' is used to contain both the functional
+ * part (the hashFunction), and its parameters.
*/
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI hashFunctionContext
+#else
+struct _hashFunctionContext
+#endif
{
-/*@observer@*/ /*@dependent@*/
- const hashFunction* algo; /*!< global functions and parameters */
-/*@only@*/
- hashFunctionParam* param; /*!< specific parameters */
-} hashFunctionContext;
+ const hashFunction* algo;
+ hashFunctionParam* param;
+
+ #ifdef __cplusplus
+ hashFunctionContext();
+ hashFunctionContext(const hashFunction*);
+ ~hashFunctionContext();
+ #endif
+};
+
+#ifndef __cplusplus
+typedef struct _hashFunctionContext hashFunctionContext;
+#endif
+
+/*
+ * The following functions can be used to initialize and free a
+ * hashFunctionContext. Initializing will allocate a buffer of the size
+ * required by the hashFunction, freeing will deallocate that buffer.
+ */
#ifdef __cplusplus
extern "C" {
#endif
-/** \ingroup HASH_m
- * Initialize a hashFunction instance.
- */
BEECRYPTAPI
-int hashFunctionContextInit(/*@special@*/ hashFunctionContext* ctxt, /*@observer@*/ /*@dependent@*/ const hashFunction* hash)
- /*@defines ctxt->algo, ctxt->param @*/
- /*@modifies ctxt->algo, ctxt->param @*/;
-
-/** \ingroup HASH_m
- * Destroy a hashFunction instance.
- */
+int hashFunctionContextInit(hashFunctionContext*, const hashFunction*);
BEECRYPTAPI
-int hashFunctionContextFree(/*@special@*/ hashFunctionContext* ctxt)
- /*@releases ctxt->param @*/
- /*@modifies ctxt->algo, ctxt->param @*/;
-
-/** \ingroup HASH_m
- */
+int hashFunctionContextFree(hashFunctionContext*);
BEECRYPTAPI
-int hashFunctionContextReset(hashFunctionContext* ctxt)
- /*@modifies ctxt @*/;
-
-/** \ingroup HASH_m
- */
-BEECRYPTAPI /*@unused@*/
-int hashFunctionContextUpdate(hashFunctionContext* ctxt, const byte* data, size_t size)
- /*@modifies ctxt @*/;
-
-/** \ingroup HASH_m
- */
-BEECRYPTAPI /*@unused@*/
-int hashFunctionContextUpdateMC(hashFunctionContext* ctxt, const memchunk* m)
- /*@modifies ctxt @*/;
-
-/** \ingroup HASH_m
- */
+int hashFunctionContextReset(hashFunctionContext*);
BEECRYPTAPI
-int hashFunctionContextUpdateMP(hashFunctionContext* ctxt, const mpnumber* n)
- /*@modifies ctxt @*/;
-
-/** \ingroup HASH_m
- */
+int hashFunctionContextUpdate(hashFunctionContext*, const byte*, size_t);
BEECRYPTAPI
-int hashFunctionContextDigest(hashFunctionContext* ctxt, byte* digest)
- /*@modifies ctxt, *digest @*/;
-
-/** \ingroup HASH_m
- */
-/*@-exportlocal@*/
+int hashFunctionContextUpdateMC(hashFunctionContext*, const memchunk*);
BEECRYPTAPI
-int hashFunctionContextDigestMP(hashFunctionContext* ctxt, mpnumber* d)
- /*@modifies ctxt, *d @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HASH_m
- */
-BEECRYPTAPI /*@unused@*/
-int hashFunctionContextDigestMatch(hashFunctionContext* ctxt, const mpnumber* d)
- /*@modifies ctxt @*/;
+int hashFunctionContextUpdateMP(hashFunctionContext*, const mpnumber*);
+BEECRYPTAPI
+int hashFunctionContextDigest(hashFunctionContext*, byte*);
+BEECRYPTAPI
+int hashFunctionContextDigestMP(hashFunctionContext*, mpnumber*);
+BEECRYPTAPI
+int hashFunctionContextDigestMatch(hashFunctionContext*, const mpnumber*);
#ifdef __cplusplus
}
#endif
-/*@}*/
-/** \name Keyed Hash Functions, a.k.a. Message Authentication Codes */
-/*@{*/
-
-/** \ingroup HMAC_m
+/*
+ * Keyed Hash Functions, a.k.a. Message Authentication Codes
*/
-typedef void keyedHashFunctionParam;
-/** \ingroup HMAC_m
- * Setup the keyed hash function parameters with the given secret key.
- * This can also be used to reset the parameters.
- *
- * @note After use, it is recommended to wipe the parameters by calling setup
- * again with another (dummy) key.
- *
- * @param param keyed hash parameters
- * @param key secret key
- * @param keybits no. bits in secret key
- * @return 0 on success, -1 on failure
+/*!\typedef void keyedHashFunctionParam
+ * \ingroup HMAC_m
*/
-typedef int (*keyedHashFunctionSetup) (keyedHashFunctionParam* param, const byte* key, size_t keybits)
- /*@modifies *param @*/;
+typedef void keyedHashFunctionParam;
-/** \ingroup HMAC_m
- * Re-initialize the parameters of a keyed hash function.
- *
- * @param param keyed hash parameters
- * @return 0 on success, -1 on failure
- */
-typedef int (*keyedHashFunctionReset) (keyedHashFunctionParam* param)
- /*@modifies *param @*/;
+typedef int (*keyedHashFunctionSetup )(keyedHashFunctionParam*, const byte*, size_t);
+typedef int (*keyedHashFunctionReset )(keyedHashFunctionParam*);
+typedef int (*keyedHashFunctionUpdate )(keyedHashFunctionParam*, const byte*, size_t);
+typedef int (*keyedHashFunctionDigest )(keyedHashFunctionParam*, byte*);
-/** \ingroup HMAC_m
- * Update the keyed hash function with an array of bytes.
+/*
+ * The struct 'keyedHashFunction' holds information and pointers to code
+ * specific to each keyed hash function. Specific keyed hash functions MAY be
+ * written to be multithread-safe.
*
- * @param param keyed hash parameters
- * @param data array of bytes
- * @param size no. of bytes
- * @return 0 on success, -1 on failure
+ * The struct field 'keybitsmin' contains the minimum number of bits a key
+ * must contains, 'keybitsmax' the maximum number of bits a key may contain,
+ * 'keybitsinc', the increment in bits that may be used between min and max.
+ *
+ * NOTE: data must be at least have a bytesize of 'digestsize' as described
+ * in the keyedHashFunction struct.
+ * NOTE: for safety reasons, after calling digest, each specific implementation
+ * MUST reset itself so that previous values in the parameters are erased.
*/
-typedef int (*keyedHashFunctionUpdate) (keyedHashFunctionParam* param, const byte* data, size_t size)
- /*@modifies *param @*/;
+#ifdef __cplusplus
+struct BEECRYPTAPI keyedHashFunction
+#else
+struct _keyedHashFunction
+#endif
+{
+ const char* name;
+ const size_t paramsize; /* in bytes */
+ const size_t blocksize; /* in bytes */
+ const size_t digestsize; /* in bytes */
+ const size_t keybitsmin; /* in bits */
+ const size_t keybitsmax; /* in bits */
+ const size_t keybitsinc; /* in bits */
+ const keyedHashFunctionSetup setup;
+ const keyedHashFunctionReset reset;
+ const keyedHashFunctionUpdate update;
+ const keyedHashFunctionDigest digest;
+};
+
+#ifndef __cplusplus
+typedef struct _keyedHashFunction keyedHashFunction;
+#endif
-/** \ingroup HMAC_m
- * Compute the digest (or authentication code) of all the data passed to
- * the keyed hash function, and return the result in data.
+/*
+ * You can use the following functions to find keyed hash functions implemented
+ * by the library:
*
- * @note data must be at least have a bytesize of 'digestsize' as described
- * in the keyedHashFunction struct.
+ * keyedHashFunctionCount returns the number of keyed hash functions available.
*
- * @note For safety reasons, after calling digest, each specific implementation
- * MUST reset itself so that previous values in the parameters are erased.
+ * keyedHashFunctionGet returns the keyed hash function with a given index
+ * (starting at zero, up to keyedHashFunctionCount() - 1), or NULL if the index
+ * was out of bounds.
*
- * @param param keyed hash parameters
- * @retval data digest (or authentication code)
- * @return 0 on success, -1 on failure
+ * keyedHashFunctionFind returns the keyed hash function with the given name,
+ * or NULL if no keyed hash function exists with that name.
*/
-typedef int (*keyedHashFunctionDigest) (keyedHashFunctionParam* param, /*@out@*/ byte* data)
- /*@modifies *param, *data @*/;
-
-/** \ingroup HMAC_m
- * Methods and parameters for keyed hash functions.
- * Specific keyed hash functions MAY be written to be multithread-safe.
- */
-typedef struct
-{
-/*@observer@*/
- const char* name; /*!< keyed hash function name */
- const size_t paramsize; /*!< in bytes */
- const size_t blocksize; /*!< in bytes */
- const size_t digestsize; /*!< in bytes */
- const size_t keybitsmin; /*!< min keysize in bits */
- const size_t keybitsmax; /*!< max keysize in bits */
- const size_t keybitsinc; /*!< keysize increment in bits */
- const keyedHashFunctionSetup setup;
- const keyedHashFunctionReset reset;
- const keyedHashFunctionUpdate update;
- const keyedHashFunctionDigest digest;
-} keyedHashFunction;
#ifdef __cplusplus
extern "C" {
#endif
-/** \ingroup HMAC_m
- * Return the number of keyed hash functions available.
- * @return number of keyed hash functions available
- */
-BEECRYPTAPI /*@unused@*/
-int keyedHashFunctionCount(void)
- /*@*/;
-
-/** \ingroup HMAC_m
- * Retrieve a keyed hash function by index.
- * @param index keyed hash function index
- * @return keyed hash function pointer (or NULL)
- */
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const keyedHashFunction* keyedHashFunctionGet(int index)
- /*@*/;
-
-/** \ingroup HMAC_m
- * Retrieve a keyed hash function by name.
- * @param name keyed hash function name
- * @return keyed hash function pointer (or NULL)
- */
-/*@-exportlocal@*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/
-const keyedHashFunction* keyedHashFunctionFind(const char* name)
- /*@*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_m
- * Retrieve the default keyed hash function.
- * If the BEECRYPT_KEYEDHASH environment variable is set, use that keyed
- * hash function. Otherwise, use "hmacsha1".
- * @return keyed hash function pointer
- */
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const keyedHashFunction* keyedHashFunctionDefault(void)
- /*@*/;
+BEECRYPTAPI
+int keyedHashFunctionCount(void);
+BEECRYPTAPI
+const keyedHashFunction* keyedHashFunctionGet(int);
+BEECRYPTAPI
+const keyedHashFunction* keyedHashFunctionFind(const char*);
+BEECRYPTAPI
+const keyedHashFunction* keyedHashFunctionDefault(void);
#ifdef __cplusplus
}
#endif
-/** \ingroup HMAC_m
- * A keyedHashFunction instance, global functions and specific parameters.
+/*
+ * The struct 'keyedHashFunctionContext' is used to contain both the functional
+ * part (the keyedHashFunction), and its parameters.
*/
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI keyedHashFunctionContext
+#else
+struct _keyedHashFunctionContext
+#endif
{
-/*@observer@*/ /*@dependent@*/
- const keyedHashFunction* algo; /*!< global functions and parameters */
-/*@only@*/
- keyedHashFunctionParam* param; /*!< specific parameters */
-} keyedHashFunctionContext;
+ const keyedHashFunction* algo;
+ keyedHashFunctionParam* param;
+
+ #ifdef __cplusplus
+ keyedHashFunctionContext();
+ keyedHashFunctionContext(const keyedHashFunction*);
+ ~keyedHashFunctionContext();
+ #endif
+};
+
+#ifndef __cplusplus
+typedef struct _keyedHashFunctionContext keyedHashFunctionContext;
+#endif
+
+/*
+ * The following functions can be used to initialize and free a
+ * keyedHashFunctionContext. Initializing will allocate a buffer of the size
+ * required by the keyedHashFunction, freeing will deallocate that buffer.
+ */
#ifdef __cplusplus
extern "C" {
#endif
-/** \ingroup HMAC_m
- * Initialize a keyedHashFunction instance.
- */
BEECRYPTAPI
-int keyedHashFunctionContextInit(/*@special@*/ keyedHashFunctionContext* ctxt, /*@observer@*/ /*@dependent@*/ const keyedHashFunction* mac)
- /*@defines ctxt->algo, ctxt->param @*/
- /*@modifies ctxt->algo, ctxt->param @*/;
-
-/** \ingroup HMAC_m
- * Destroy a keyedHashFunction instance.
- */
+int keyedHashFunctionContextInit(keyedHashFunctionContext*, const keyedHashFunction*);
BEECRYPTAPI
-int keyedHashFunctionContextFree(/*@special@*/ keyedHashFunctionContext* ctxt)
- /*@uses ctxt->algo @*/
- /*@releases ctxt->param @*/
- /*@modifies ctxt->algo, ctxt->param @*/;
-
-/** \ingroup HMAC_m
- */
+int keyedHashFunctionContextFree(keyedHashFunctionContext*);
BEECRYPTAPI
-int keyedHashFunctionContextSetup(keyedHashFunctionContext* ctxt, const byte* key, size_t keybits)
- /*@modifies ctxt @*/;
-
-/** \ingroup HMAC_m
- */
-BEECRYPTAPI /*@unused@*/
-int keyedHashFunctionContextReset(keyedHashFunctionContext* ctxt)
- /*@modifies ctxt @*/;
-
-/** \ingroup HMAC_m
- */
-BEECRYPTAPI /*@unused@*/
-int keyedHashFunctionContextUpdate(keyedHashFunctionContext* ctxt, const byte* data, size_t size)
- /*@modifies ctxt @*/;
-
-/** \ingroup HMAC_m
- */
+int keyedHashFunctionContextSetup(keyedHashFunctionContext*, const byte*, size_t);
BEECRYPTAPI
-int keyedHashFunctionContextUpdateMC(keyedHashFunctionContext* ctxt, const memchunk* m)
- /*@modifies ctxt @*/;
-
-/** \ingroup HMAC_m
- */
-BEECRYPTAPI /*@unused@*/
-int keyedHashFunctionContextUpdateMP(keyedHashFunctionContext* ctxt, const mpnumber* n)
- /*@modifies ctxt @*/;
-
-/** \ingroup HMAC_m
- */
-BEECRYPTAPI /*@unused@*/
-int keyedHashFunctionContextDigest(keyedHashFunctionContext* ctxt, byte* digest)
- /*@modifies ctxt, *digest @*/;
-
+int keyedHashFunctionContextReset(keyedHashFunctionContext*);
BEECRYPTAPI
-int keyedHashFunctionContextDigestMP(keyedHashFunctionContext* ctxt, const mpnumber* d)
- /*@modifies ctxt, d @*/;
-
-/** \ingroup HMAC_m
- */
+int keyedHashFunctionContextUpdate(keyedHashFunctionContext*, const byte*, size_t);
BEECRYPTAPI
-int keyedHashFunctionContextDigestMatch(keyedHashFunctionContext* ctxt, const mpnumber* d)
- /*@modifies ctxt @*/;
+int keyedHashFunctionContextUpdateMC(keyedHashFunctionContext*, const memchunk*);
+BEECRYPTAPI
+int keyedHashFunctionContextUpdateMP(keyedHashFunctionContext*, const mpnumber*);
+BEECRYPTAPI
+int keyedHashFunctionContextDigest(keyedHashFunctionContext*, byte*);
+BEECRYPTAPI
+int keyedHashFunctionContextDigestMP(keyedHashFunctionContext*, mpnumber*);
+BEECRYPTAPI
+int keyedHashFunctionContextDigestMatch(keyedHashFunctionContext*, const mpnumber*);
#ifdef __cplusplus
}
#endif
-/*@}*/
-/** \name Block ciphers */
-/*@{*/
-
-typedef void blockCipherParam;
+/*
+ * Block ciphers
+ */
-/** \ingroup BC_m
- * Block cipher operations.
+/*!\enum cipherOperation
+ * \brief Specifies whether to perform encryption or decryption.
+ * \ingroup BC_m
*/
typedef enum
{
DECRYPT
} cipherOperation;
-/** \ingroup BC_m
- * Setup the blockcipher parameters with the given secret key for either
- * encryption or decryption.
- *
- * @note After use, it is recommended to wipe the parameters by calling setup
- * again with another (dummy) key.
- *
- * @param param blockcipher parameters
- * @param key secret key
- * @param keybits no. bits in secret key
- * @param cipherOperation
- * @return 0 on success, -1 on failure
- */
-typedef int (*blockCipherSetup) (blockCipherParam* param, const byte* key, size_t keybits, cipherOperation cipherOperation)
- /*@modifies param @*/;
-
-/** \ingroup BC_m
- * Initialize IV for blockcipher.
- * @param param blockcipher parameters
- * @param data iv data
- * @return 0 on success, -1 on failure
- */
-typedef int (*blockCipherSetIV) (blockCipherParam* param, const byte* data)
- /*@modifies param @*/;
-
-/** \ingroup BC_m
- * Encrypt/decrypt a block of data.
- * @note This is raw encryption, without padding, etc.
- *
- * @param param blockcipher parameters
- * @retval dst ciphertext block
- * @param src plaintext block
- * @return 0 on success, -1 on failure
+/*!\typedef void blockCipherParam
+ * \brief Placeholder type definition for blockcipher parameters.
+ * \sa aesParam, blowfishParam.
+ * \ingroup BC_m
*/
-typedef int (*blockCipherRawcrypt) (blockCipherParam* param, uint32_t* dst, const uint32_t* src)
- /*@modifies param, dst @*/;
+typedef void blockCipherParam;
-/** \ingroup BC_m
- * Encrypt/decrypt multiple blocks of data.
- * @note This is raw decryption, without padding, etc.
- *
- * @param param blockcipher parameters
- * @retval dst plaintext block
- * @param src ciphertext block
- * @param nblocks no. of blocks
- * @return 0 on success, -1 on failure
- */
-typedef int (*blockCipherModcrypt) (blockCipherParam* param, uint32_t* dst, const uint32_t* src, unsigned int nblocks)
- /*@modifies param, dst @*/;
+/*!\brief Prototype definition for a setup function.
+ * \ingroup BC_m
+ */
+typedef int (*blockCipherSetup )(blockCipherParam*, const byte*, size_t, cipherOperation);
+
+/*!\typedef int (*blockCipherSetIV)(blockCipherPatam* bp, const byte* iv)
+ * \brief Prototype definition for an initialization vector setup function.
+ * \param bp The blockcipher's parameters.
+ * \param iv The blockciphers' IV value.
+ * \note iv length must be equal to the cipher's block size.
+ * \retval 0 on success.
+ * \retval -1 on failure.
+ * \ingroup BC_m
+ */
+typedef int (*blockCipherSetIV )(blockCipherParam*, const byte*);
+
+/*!\typedef int (*blockCipherRawcrypt)(blockCipherParam* bp, uint32_t* dst, const uint32_t* src)
+ * \brief Prototype for a \e raw encryption or decryption function.
+ * \param bp The blockcipher's parameters.
+ * \param dst The ciphertext address; must be aligned on 32-bit boundary.
+ * \param src The cleartext address; must be aligned on 32-bit boundary.
+ * \retval 0 on success.
+ * \retval -1 on failure.
+ * \ingroup BC_m
+ */
+typedef int (*blockCipherRawcrypt)(blockCipherParam*, uint32_t*, const uint32_t*);
+
+/*!\typedef int (*blockCipherModcrypt)(blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks)
+ * \brief Prototype for a \e encryption or decryption function which operates
+ * on multiple blocks in a certain mode.
+ * \param bp The blockcipher's parameters.
+ * \param dst The ciphertext address; must be aligned on 32-bit boundary.
+ * \param src The cleartext address; must be aligned on 32-bit boundary.
+ * \param nblocks The number of blocks to process.
+ * \retval 0 on success.
+ * \retval -1 on failure.
+ * \ingroup BC_m
+ */
+typedef int (*blockCipherModcrypt)(blockCipherParam*, uint32_t*, const uint32_t*, unsigned int);
typedef uint32_t* (*blockCipherFeedback)(blockCipherParam*);
const blockCipherModcrypt decrypt;
} blockCipherMode;
-/** \ingroup BC_m
- * Methods and parameters for block ciphers.
- * Specific block ciphers MAY be written to be multithread-safe.
+/*!\brief Holds information and pointers to code specific to each cipher.
+ *
+ * Specific block ciphers \e may be written to be multithread-safe.
+ *
+ * \ingroup BC_m
*/
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI blockCipher
+#else
+struct _blockCipher
+#endif
{
-/*@observer@*/
- const char* name; /*!< block cipher name */
- const size_t paramsize; /*!< in bytes */
- const size_t blocksize; /*!< in bytes */
- const size_t keybitsmin; /*!< min keysize in bits */
- const size_t keybitsmax; /*!< max keysize in bits */
- const size_t keybitsinc; /*!< keysize increment in bits */
- const blockCipherSetup setup;
- const blockCipherSetIV setiv;
- const blockCipherRaw raw;
- const blockCipherMode ecb;
- const blockCipherMode cbc;
- const blockCipherFeedback getfb;
-} blockCipher;
+ /*!\var name
+ * \brief The blockcipher's name.
+ */
+ const char* name;
+ /*!\var paramsize
+ * \brief The size of the parameters required by this cipher, in bytes.
+ */
+ const size_t paramsize;
+ /*!\var blocksize
+ * \brief The size of one block of data, in bytes.
+ */
+ const size_t blocksize;
+ /*!\var keybitsmin
+ * \brief The minimum number of key bits.
+ */
+ const size_t keybitsmin;
+ /*!\var keybitsmax
+ * \brief The maximum number of key bits.
+ */
+ const size_t keybitsmax;
+ /*!\var keybitsinc
+ * \brief The allowed increment in key bits between min and max.
+ * \see keybitsmin and keybitsmax.
+ */
+ const size_t keybitsinc;
+ /*!\var setup
+ * \brief Pointer to the cipher's setup function.
+ */
+ const blockCipherSetup setup;
+ /*!\var setiv
+ * \brief Pointer to the cipher's initialization vector setup function.
+ */
+ const blockCipherSetIV setiv;
+ /*!\var raw
+ * \brief The cipher's raw functions.
+ */
+ const blockCipherRaw raw;
+ /*!\var ecb
+ * \brief The cipher's ECB functions.
+ */
+ const blockCipherMode ecb;
+ const blockCipherMode cbc;
+ /*!\var getfb
+ * \brief Pointer to the cipher's feedback-returning function.
+ */
+ const blockCipherFeedback getfb;
+};
+
+#ifndef __cplusplus
+typedef struct _blockCipher blockCipher;
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
-/** \ingroup BC_m
- * Return the number of blockciphers available.
- * @return number of blockciphers available
+/*!\fn int blockCipherCount()
+ * \brief This function returns the number of blockciphers implemented
+ * by the library.
+ * \return The number of implemented blockciphers.
*/
-BEECRYPTAPI /*@unused@*/
-int blockCipherCount(void)
- /*@*/;
+BEECRYPTAPI
+int blockCipherCount(void);
-/** \ingroup BC_m
- * Retrieve a blockcipher by index.
- * @param index blockcipher index
- * @return blockcipher pointer (or NULL)
+/*!\fn const blockCipher* blockCipherGet(int n)
+ * \brief This function returns the \a n -th blockcipher implemented by
+ * the library.
+ * \param n Index of the requested blockcipher; legal values are 0
+ * through blockCipherCount() - 1.
+ * \return A pointer to a blockcipher or null, if the index was out of
+ * range.
*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const blockCipher* blockCipherGet(int index)
- /*@*/;
+BEECRYPTAPI
+const blockCipher* blockCipherGet(int);
-/** \ingroup BC_m
- * Retrieve a blockcipher by name.
- * @param name blockcipher name
- * @return blockcipher pointer (or NULL)
+/*!\fn const blockCIiher* blockCipherFind(const char* name)
+ * \brief This function returns the blockcipher specified by the given name.
+ * \param name Name of the requested blockcipher.
+ * \return A pointer to a blockcipher or null, if the name wasn't found.
*/
-/*@-exportlocal@*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/
-const blockCipher* blockCipherFind(const char* name)
- /*@*/;
-/*@=exportlocal@*/
+BEECRYPTAPI
+const blockCipher* blockCipherFind(const char*);
-/** \ingroup BC_m
- * Retrieve the default blockcipher.
- * If the BEECRYPT_CIPHER environment variable is set, use that blockcipher.
- * Otherwise, use "blowfish".
- * @return blockcipher pointer
+/*!\fn const blockCipher* blockCipherDefault()
+ * \brief This functions returns the default blockcipher; the default value
+ * can be specified by setting environment variable BEECRYPT_CIPHER.
+ * \return A pointer to a blockcipher or null, in case an error occured.
*/
-BEECRYPTAPI /*@observer@*/ /*@null@*/ /*@unused@*/
-const blockCipher* blockCipherDefault(void)
- /*@*/;
+BEECRYPTAPI
+const blockCipher* blockCipherDefault(void);
#ifdef __cplusplus
}
#endif
-/** \ingroup BC_m
- * A blockCipher instance, global functions and specific parameters.
+/*!\brief Holds a pointer to a blockcipher as well as its parameters.
+ * \warning A context can be used by only one thread at the same time.
+ * \ingroup BC_m
*/
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI blockCipherContext
+#else
+struct _blockCipherContext
+#endif
{
-/*@observer@*/ /*@dependent@*/
- const blockCipher* algo; /*!< global functions and parameters */
-/*@only@*/
- blockCipherParam* param; /*!< specific parameters */
- cipherOperation op;
-} blockCipherContext;
+ /*!\var algo
+ * \brief Pointer to a blockCipher.
+ */
+ const blockCipher* algo;
+ /*!\var param
+ * \brief Pointer to the parameters used by algo.
+ */
+ blockCipherParam* param;
+ /*!\var op
+ */
+ cipherOperation op;
+
+ #ifdef __cplusplus
+ blockCipherContext();
+ blockCipherContext(const blockCipher*);
+ ~blockCipherContext();
+ #endif
+};
+
+#ifndef __cplusplus
+typedef struct _blockCipherContext blockCipherContext;
+#endif
+
+/*
+ * The following functions can be used to initialize and free a
+ * blockCipherContext. Initializing will allocate a buffer of the size
+ * required by the blockCipher, freeing will deallocate that buffer.
+ */
#ifdef __cplusplus
extern "C" {
#endif
-/** \ingroup BC_m
- * Initialize a blockCipher instance.
- */
BEECRYPTAPI
-int blockCipherContextInit(/*@special@*/ blockCipherContext* ctxt, /*@observer@*/ /*@dependent@*/ const blockCipher* ciph)
- /*@defines ctxt->algo, ctxt->param, ctxt->op @*/
- /*@modifies ctxt->algo, ctxt->param, ctxt->op @*/;
+int blockCipherContextInit(blockCipherContext*, const blockCipher*);
-/** \ingroup BC_m
- */
BEECRYPTAPI
-int blockCipherContextSetup(blockCipherContext* ctxt, const byte* key, size_t keybits, cipherOperation op)
- /*@modifies ctxt @*/;
+int blockCipherContextSetup(blockCipherContext*, const byte*, size_t, cipherOperation);
-/** \ingroup BC_m
- */
-BEECRYPTAPI /*@unused@*/
-int blockCipherContextSetIV(blockCipherContext* ctxt, const byte* iv)
- /*@modifies ctxt @*/;
+BEECRYPTAPI
+int blockCipherContextSetIV(blockCipherContext*, const byte*);
-/** \ingroup BC_m
- * Destroy a blockCipher instance.
- */
BEECRYPTAPI
-int blockCipherContextFree(/*@special@*/ blockCipherContext* ctxt)
- /*@releases ctxt->param @*/
- /*@modifies ctxt->algo, ctxt->param @*/;
+int blockCipherContextFree(blockCipherContext*);
-/** \ingroup BC_m
- */
-BEECRYPTAPI /*@unused@*/
-int blockCipherContextECB(blockCipherContext* ctxt, uint32_t* dst, const uint32_t* src, size_t nblocks)
- /*@modifies ctxt->param, dst @*/;
+BEECRYPTAPI
+int blockCipherContextECB(blockCipherContext*, uint32_t*, const uint32_t*, int);
-/** \ingroup BC_m
- */
-BEECRYPTAPI /*@unused@*/
-int blockCipherContextCBC(blockCipherContext* ctxt, uint32_t* dst, const uint32_t* src, size_t nblocks)
- /*@modifies ctxt->param, dst @*/;
+BEECRYPTAPI
+int blockCipherContextCBC(blockCipherContext*, uint32_t*, const uint32_t*, int);
#ifdef __cplusplus
}
#endif
-/*@}*/
#endif
#include <winver.h>
1 VERSIONINFO
- FILEVERSION 3,0,0,0
- PRODUCTVERSION 3,0,0,0
+ FILEVERSION 3,1,0,0
+ PRODUCTVERSION 3,1,0,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0x0L
FILEOS VOS__WINDOWS32
BEGIN
VALUE "CompanyName", "Virtual Unlimited B.V.\0"
VALUE "FileDescription", "BeeCrypt Cryptography Library\0"
- VALUE "FileVersion", "3.0.0\0"
+ VALUE "FileVersion", "3.1.0\0"
VALUE "InternalName", "beecrypt\0"
VALUE "LegalCopyright", "Copyright (c) 1997-2003 Virtual Unlimited B.V.\0"
VALUE "LegalTradeMarks", "BeeCrypt is a trademark of Virtual Unlimited B.V.\0"
VALUE "OriginalFileName", "BEECRYPT.DLL\0"
VALUE "ProductName", "BeeCrypt\0"
- VALUE "ProductVersion", "3.0.0\0"
+ VALUE "ProductVersion", "3.1.0\0"
END
END
BLOCK "VarFileInfo"
+++ /dev/null
-Summary: The BeeCrypt Cryptography Library
-Name: beecrypt
-Version: 2.2.0
-Release: 1
-Copyright: LGPL
-Group: Development/Libraries
-Source0: http://beecrypt.virtualunlimited.com/download/beecrypt-%{version}.tar.gz
-URL: http://beecrypt.virtualunlimited.com/
-Buildroot: %{_tmppath}/%{name}-root
-
-%description
-The BeeCrypt Cryptography Library.
-
-%package devel
-Summary: The BeeCrypt Cryptography Library headers
-Group: Development/Libraries
-Requires: beecrypt = %{version}
-
-%description devel
-The BeeCrypt Cryptography Library headers.
-
-%prep
-%setup -q
-
-%build
-%configure --enable-static
-make
-make apidocs
-
-%install
-rm -rf ${RPM_BUILD_ROOT}
-make DESTDIR="${RPM_BUILD_ROOT}" install
-
-%clean
-rm -rf ${RPM_BUILD_ROOT}
-
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-%files
-%defattr(-,root,root)
-%doc BENCHMARKS NEWS README*
-%{_libdir}/libbeecrypt.so.@VERSION@
-
-%files devel
-%defattr(-,root,root)
-%doc BUGS ChangeLog apidocs/*
-%{_libdir}/libbeecrypt.so.2
-%{_libdir}/libbeecrypt.so
-%{_libdir}/libbeecrypt.la
-%{_libdir}/libbeecrypt.a
-%{_includedir}/beecrypt
-
-%changelog
-* Mon Oct 8 2001 Jeff Johnson <jbj@redhat.com>
-- upgrade to 2.2.0pre.
-
-* Mon Sep 24 2001 Jeff Johnsopn <jbj@redhat.com>
-- add static libraries.
-
-* Tue Sep 18 2001 Jeff Johnson <jbj@redhat.com>
-- repackage.
* \ingroup BC_m
*/
-#include "system.h"
-#include "blockmode.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
-/*!\addtogroup BC_m
- * \{
- */
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/blockmode.h"
int blockEncryptECB(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks)
{
while (nblocks > 0)
{
-/*@-noeffectuncon@*/
- (void) bc->raw.encrypt(bp, dst, src);
-/*@=noeffectuncon@*/
+ bc->raw.encrypt(bp, dst, src);
dst += blockwords;
src += blockwords;
while (nblocks > 0)
{
-/*@-noeffectuncon@*/
- (void) bc->raw.decrypt(bp, dst, src);
-/*@=noeffectuncon@*/
+ bc->raw.decrypt(bp, dst, src);
dst += blockwords;
src += blockwords;
for (i = 0; i < blockwords; i++)
dst[i] = src[i] ^ fdback[i];
-/*@-noeffectuncon@*/
- (void) bc->raw.encrypt(bp, dst, dst);
-/*@=noeffectuncon@*/
+ bc->raw.encrypt(bp, dst, dst);
src += blockwords;
nblocks--;
-/*@-usedef@*/ /* LCL: dst is initialized. */
while (nblocks > 0)
{
for (i = 0; i < blockwords; i++)
dst[i+blockwords] = src[i] ^ dst[i];
+
dst += blockwords;
-/*@-noeffectuncon@*/
- (void) bc->raw.encrypt(bp, dst, dst);
-/*@=noeffectuncon@*/
+ bc->raw.encrypt(bp, dst, dst);
src += blockwords;
for (i = 0; i < blockwords; i++)
fdback[i] = dst[i];
-/*@=usedef@*/
}
return 0;
{
register const unsigned int blockwords = bc->blocksize >> 2;
register uint32_t* fdback = bc->getfb(bp);
- register uint32_t* buf = (uint32_t*) malloc(blockwords * sizeof(*buf));
+ register uint32_t* buf = (uint32_t*) malloc(blockwords * sizeof(uint32_t));
if (buf)
{
register uint32_t tmp;
register unsigned int i;
-/*@-noeffectuncon@*/
- (void) bc->raw.decrypt(bp, buf, src);
-/*@=noeffectuncon@*/
+ bc->raw.decrypt(bp, buf, src);
for (i = 0; i < blockwords; i++)
{
tmp = src[i];
-/*@-usedef@*/ /* LCL: buf is initialized. */
dst[i] = buf[i] ^ fdback[i];
-/*@-usedef@*/
fdback[i] = tmp;
}
return -1;
}
-
-/*!\}
- */
#ifndef _BLOCKMODE_H
#define _BLOCKMODE_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
#ifdef __cplusplus
extern "C" {
#endif
-/**
- * Encrypts multiple blocks in Electronic Code Book (ECB) mode.
- * @param bc blockcipher context
- * @param bp blockcipher parameters
- * @retval dst ciphertext data (aligned on a 32-bit boundary).
- * @param src cleartext data (aligned on a 32-bit boundary).
- * @param nblocks number of blocks to be encrypted.
- * @retval 0 on success.
+/*!\fn int blockEncryptECB(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks)
+ * \brief This function encrypts a number of data blocks in Electronic Code
+ * Book mode.
+ * \param bc The blockcipher.
+ * \param bp The cipher's parameter block.
+ * \param dst The ciphertext data; should be aligned on a 32-bit boundary.
+ * \param src The cleartext data; should be aligned on a 32-bit boundary.
+ * \param nblocks The number of blocks to be encrypted.
+ * \retval 0 on success.
*/
BEECRYPTAPI
-int blockEncryptECB(const blockCipher* bc, blockCipherParam* bp, /*@out@*/ uint32_t* dst, const uint32_t* src, unsigned int nblocks)
- /*@modifies bp, dst @*/;
+int blockEncryptECB(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks);
-/**
- * Decrypts multiple blocks in Electronic Code Book (ECB) mode.
- * @param bc blockcipher context
- * @param bp blockcipher parameters
- * @retval dst ciphertext data (aligned on a 32-bit boundary).
- * @param src cleartext data (aligned on a 32-bit boundary).
- * @param nblocks number of blocks to be encrypted.
- * @retval 0 on success.
+/*!\fn int blockDecryptECB(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks)
+ * \brief This function decrypts a number of data blocks in Electronic Code
+ * Book mode.
+ * \param bc The blockcipher.
+ * \param bp The cipher's parameter block.
+ * \param dst The cleartext data; should be aligned on a 32-bit boundary.
+ * \param src The ciphertext data; should be aligned on a 32-bit boundary.
+ * \param nblocks The number of blocks to be decrypted.
+ * \retval 0 on success.
*/
BEECRYPTAPI
-int blockDecryptECB(const blockCipher* bc, blockCipherParam* bp, /*@out@*/ uint32_t* dst, const uint32_t* src, unsigned int nblocks)
- /*@modifies bp, dst @*/;
+int blockDecryptECB(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks);
-/**
- * Encrypts multiple blocks in Cipher Block Chaining (CBC) mode.
- * @param bc blockcipher context
- * @param bp blockcipher parameters
- * @retval dst ciphertext data (aligned on a 32-bit boundary).
- * @param src cleartext data (aligned on a 32-bit boundary).
- * @param nblocks number of blocks to be encrypted.
- * @retval 0 on success.
+/*!\fn int blockEncryptCBC(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks)
+ * \brief This function encrypts a number of data blocks in Cipher Block
+ * Chaining mode.
+ * \param bc The blockcipher.
+ * \param bp The cipher's parameter block.
+ * \param dst The ciphertext data; should be aligned on a 32-bit boundary.
+ * \param src The cleartext data; should be aligned on a 32-bit boundary.
+ * \param nblocks The number of blocks to be encrypted.
+ * \retval 0 on success.
*/
BEECRYPTAPI
-int blockEncryptCBC(const blockCipher* bc, blockCipherParam* bp, /*@out@*/ uint32_t* dst, const uint32_t* src, unsigned int nblocks)
- /*@modifies bp, dst @*/;
+int blockEncryptCBC(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks);
-/**
- * Decrypts multiple blocks in Cipher Block Chaining (CBC) mode.
- * @param bc blockcipher context
- * @param bp blockcipher parameters
- * @retval dst ciphertext data (aligned on a 32-bit boundary).
- * @param src cleartext data (aligned on a 32-bit boundary).
- * @param nblocks number of blocks to be encrypted.
- * @retval 0 on success.
+/*!\fn int blockDecryptCBC(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks)
+ * \brief This function decrypts a number of data blocks in Cipher Block
+ * Chaining mode.
+ * \param bc The blockcipher.
+ * \param bp The cipher's parameter block.
+ * \param dst The cleartext data; should be aligned on a 32-bit boundary.
+ * \param src The ciphertext data; should be aligned on a 32-bit boundary.
+ * \param nblocks The number of blocks to be decrypted.
+ * \retval 0 on success.
*/
BEECRYPTAPI
-int blockDecryptCBC(const blockCipher* bc, blockCipherParam* bp, /*@out@*/ uint32_t* dst, const uint32_t* src, unsigned int nblocks)
- /*@modifies bp, dst @*/;
+int blockDecryptCBC(const blockCipher* bc, blockCipherParam* bp, uint32_t* dst, const uint32_t* src, unsigned int nblocks);
#ifdef __cplusplus
}
* \ingroup BC_m
*/
-#include "system.h"
-#include "blockpad.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/blockpad.h"
memchunk* pkcs5Pad(size_t blockbytes, memchunk* tmp)
{
{
if (tmp)
{
- byte padvalue;
+ byte padvalue = tmp->data[tmp->size - 1];
+
unsigned int i;
-/*@-usedef@*/ /* LCL: tmp->{data,size} not initialized? */
- if (tmp->data == (byte*) 0)
- return (memchunk*) 0;
- padvalue = tmp->data[tmp->size - 1];
-/*@=usedef@*/
if (padvalue > blockbytes)
return (memchunk*) 0;
}
tmp->size -= padvalue;
-/* tmp->data = (byte*) realloc(tmp->data, tmp->size; */
+/* tmp->data = (byte*) realloc(tmp->data, tmp->size); */
}
- /*@-temptrans -compdef @*/
return tmp;
- /*@=temptrans =compdef @*/
}
memchunk* pkcs5PadCopy(size_t blockbytes, const memchunk* src)
return tmp;
}
-memchunk* pkcs5UnpadCopy(/*@unused@*/ size_t blockbytes, const memchunk* src)
+memchunk* pkcs5UnpadCopy(size_t blockbytes, const memchunk* src)
{
memchunk* tmp;
byte padvalue;
if (src == (memchunk*) 0)
return (memchunk*) 0;
- if (src->data == (byte*) 0)
- return (memchunk*) 0;
padvalue = src->data[src->size - 1];
#ifndef _BLOCKPAD_H
#define _BLOCKPAD_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
#ifdef __cplusplus
extern "C" {
#endif
-/**
- * Enlarge buffer to boundary.
- * @param blockbytes desired block alignment/pad boundary
- * @param tmp buffer to pad
- * @return buffer with pad added
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
-memchunk* pkcs5Pad (size_t blockbytes, /*@only@*/ /*@null@*/ memchunk* tmp)
- /*@*/;
-
-/**
- * Shrink buffer to boundary.
- * @param blockbytes desired block alignment/pad boundary
- * @param tmp buffer to unpad
- * @return buffer with pad removed
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/
-memchunk* pkcs5Unpad(size_t blockbytes,
- /*@returned@*/ /*@null@*/ /*@out@*/ memchunk* tmp)
- /*@modifies tmp @*/;
+BEECRYPTAPI
+memchunk* pkcs5Pad (size_t, memchunk*);
+BEECRYPTAPI
+memchunk* pkcs5Unpad(size_t, memchunk*);
-/**
- * Copy/enlarge buffer to boundary.
- * @param blockbytes desired block alignment/pad boundary
- * @param src buffer to pad
- * @return copy of buffer with pad added
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/
-memchunk* pkcs5PadCopy (size_t blockbytes, const memchunk* src)
- /*@*/;
-
-/**
- * Copy/shrink buffer to boundary.
- * @param blockbytes desired block alignment/pad boundary
- * @param src buffer to unpad
- * @return copy of buffer with pad removed
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
-memchunk* pkcs5UnpadCopy(size_t blockbytes, const memchunk* src)
- /*@*/;
+BEECRYPTAPI
+memchunk* pkcs5PadCopy (size_t, const memchunk*);
+BEECRYPTAPI
+memchunk* pkcs5UnpadCopy(size_t, const memchunk*);
#ifdef __cplusplus
}
* \ingroup BC_m BC_blowfish_m
*/
-#include "system.h"
-#include "beecrypt.h"
-#include "blowfishopt.h"
-#include "blowfish.h"
-#include "endianness.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/blowfish.h"
+#include "beecrypt/endianness.h"
#ifdef ASM_BLOWFISHENCRYPTECB
extern int blowfishEncryptECB(blowfishparam*, uint32_t*, const uint32_t*, unsigned int);
extern int blowfishDecryptECB(blowfishparam*, uint32_t*, const uint32_t*, unsigned int);
#endif
-/*!\addtogroup BC_blowfish_m
- * \{
- */
-
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static uint32_t _bf_p[BLOWFISHPSIZE] = {
0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
0x9216d5d9, 0x8979fb1b
};
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static uint32_t _bf_s[1024] = {
0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
#define EROUND(l,r) l ^= *(p++); r ^= ((s[((l>>24)&0xff)+0x000]+s[((l>>16)&0xff)+0x100])^s[((l>>8)&0xff)+0x200])+s[((l>>0)&0xff)+0x300]
#define DROUND(l,r) l ^= *(p--); r ^= ((s[((l>>24)&0xff)+0x000]+s[((l>>16)&0xff)+0x100])^s[((l>>8)&0xff)+0x200])+s[((l>>0)&0xff)+0x300]
-/*@-sizeoftype@*/
-/*@-castfcnptr@*/
const blockCipher blowfish = {
"Blowfish",
sizeof(blowfishParam),
- 8U,
- 64U,
- 448U,
- 32U,
+ 8,
+ 64,
+ 448,
+ 32,
(blockCipherSetup) blowfishSetup,
(blockCipherSetIV) blowfishSetIV,
/* raw */
},
(blockCipherFeedback) blowfishFeedback
};
-/*@=castfcnptr@*/
-/*@=sizeoftype@*/
int blowfishSetup(blowfishParam* bp, const byte* key, size_t keybits, cipherOperation op)
{
uint32_t tmp, work[2];
- memcpy(s, _bf_s, 1024 * sizeof(*s));
+ memcpy(s, _bf_s, 1024 * sizeof(uint32_t));
for (i = 0, k = 0; i < BLOWFISHPSIZE; i++)
{
for (i = 0; i < BLOWFISHPSIZE; i += 2, p += 2)
{
- (void) blowfishEncrypt(bp, work, work);
+ blowfishEncrypt(bp, work, work);
#if WORDS_BIGENDIAN
p[0] = work[0];
p[1] = work[1];
for (i = 0; i < 1024; i += 2, s += 2)
{
- (void) blowfishEncrypt(bp, work, work);
+ blowfishEncrypt(bp, work, work);
#if WORDS_BIGENDIAN
s[0] = work[0];
s[1] = work[1];
#ifndef ASM_BLOWFISHSETIV
int blowfishSetIV(blowfishParam* bp, const byte* iv)
{
-/*@-mayaliasunique@*/
if (iv)
- memcpy(bp->fdback, iv, sizeof(bp->fdback));
+ memcpy(bp->fdback, iv, 8);
else
- memset(bp->fdback, 0, sizeof(bp->fdback));
-/*@=mayaliasunique@*/
+ memset(bp->fdback, 0, 8);
return 0;
}
#endif
-/*@-exportheader@*/
-/*@unused@*/
int blowfishBlowit(blowfishParam* bp, uint32_t* dst, const uint32_t* src)
- /*@modifies *dst @*/
{
register uint32_t xl = src[0], xr = src[1];
register uint32_t* p = bp->p;
return 0;
}
-/*@=exportheader@*/
#ifndef ASM_BLOWFISHENCRYPT
int blowfishEncrypt(blowfishParam* bp, uint32_t* dst, const uint32_t* src)
{
return bp->fdback;
}
-
-/*!\}
- */
#ifndef _BLOWFISH_H
#define _BLOWFISH_H
-#include "beecrypt.h"
-#include "blowfishopt.h"
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/blowfishopt.h"
#define BLOWFISHROUNDS 16
#define BLOWFISHPSIZE (BLOWFISHROUNDS+2)
-/** \ingroup BC_blowfish_m
+/*!\brief Holds all the parameters necessary for the Blowfish cipher.
+ * \ingroup BC_blowfish_m
*/
typedef struct
{
+ /*!\var p
+ * \brief Holds the key expansion.
+ */
uint32_t p[BLOWFISHPSIZE];
+ /*!\var s
+ * \brief Holds the s-boxes.
+ */
uint32_t s[1024];
+ /*!\var fdback
+ * \brief Buffer to be used by block chaining or feedback modes.
+ */
uint32_t fdback[2];
} blowfishParam;
extern "C" {
#endif
-/** \ingroup BC_blowfish_m
+/*!\var blowfish
+ * \brief Holds the full API description of the Blowfish algorithm.
*/
-/*@observer@*/ /*@checked@*/
extern const BEECRYPTAPI blockCipher blowfish;
-/** \ingroup BC_blowfish_m
+/*!\fn int blowfishSetup(blowfishParam* bp, const byte* key, size_t keybits, cipherOperation
+ op)
+ * \brief The function performs the cipher's key expansion.
+ * \param bp The cipher's parameter block.
+ * \param key The key value.
+ * \param keybits The number of bits in the key; legal values are: 32 to 448,
+ * in multiples of 8.
+ * \param op ENCRYPT or DECRYPT.
+ * \retval 0 on success.
+ * \retval -1 on failure.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int blowfishSetup (blowfishParam* bp, const byte* key, size_t keybits, cipherOperation op)
- /*@modifies bp @*/;
-/*@=exportlocal@*/
+int blowfishSetup (blowfishParam*, const byte*, size_t, cipherOperation);
-/** \ingroup BC_blowfish_m
+/*!\fn int blowfishSetIV(blowfishParam* bp, const byte* iv)
+ * \brief This function sets the Initialization Vector.
+ * \note This function is only useful in block chaining or feedback modes.
+ * \param bp The cipher's parameter block.
+ * \param iv The initialization vector; may be null.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int blowfishSetIV (blowfishParam* bp, const byte* iv)
- /*@modifies bp @*/;
-/*@=exportlocal@*/
+int blowfishSetIV (blowfishParam*, const byte*);
-/** \ingroup BC_blowfish_m
+/*!\fn blowfishEncrypt(blowfishParam* bp, uint32_t* dst, const uint32_t* src)
+ * \brief This function performs the Blowfish encryption; it encrypts one block
+ * of 64 bits.
+ * \param bp The cipher's parameter block.
+ * \param dst The ciphertext; should be aligned on 32-bit boundary.
+ * \param src The cleartext; should be aligned on 32-bit boundary.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int blowfishEncrypt(blowfishParam* bp, uint32_t* dst, const uint32_t* src)
- /*@modifies bp, dst @*/;
-/*@=exportlocal@*/
+int blowfishEncrypt (blowfishParam*, uint32_t*, const uint32_t*);
-/** \ingroup BC_blowfish_m
+/*!\fn blowfishDecrypt(blowfishParam* bp, uint32_t* dst, const uint32_t* src)
+ * \brief This function performs the Blowfish decryption; it Rderypts one block
+ * of 64 bits.
+ * \param bp The cipher's parameter block.
+ * \param dst The cleartext; should be aligned on 32-bit boundary.
+ * \param src The ciphertext; should be aligned on 32-bit boundary.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int blowfishDecrypt(blowfishParam* bp, uint32_t* dst, const uint32_t* src)
- /*@modifies bp, dst @*/;
-/*@=exportlocal@*/
+int blowfishDecrypt (blowfishParam*, uint32_t*, const uint32_t*);
-/** \ingroup BC_blowfish_m
- */
-/*@-exportlocal@*/
-BEECRYPTAPI /*@observer@*/
-uint32_t* blowfishFeedback(blowfishParam* bp)
- /*@*/;
-/*@=exportlocal@*/
+BEECRYPTAPI
+uint32_t* blowfishFeedback(blowfishParam*);
#ifdef __cplusplus
}
/*!\file blowfishopt.h
* \brief Blowfish block cipher, assembler-optimized routines, headers.
- * \author Bob Deblier <bob@virtualunlimited.com>
+ * \author Bob Deblier <bob.deblier@pandora.be>
* \ingroup BC_blowfish_m
*/
#ifndef _BLOWFISHOPT_H
#define _BLOWFISHOPT_H
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/blowfish.h"
+
#ifdef __cplusplus
extern "C" {
#endif
--- /dev/null
+LIBBEECRYPT_CXX_LT_CURRENT = 8
+LIBBEECRYPT_CXX_LT_AGE = 2
+LIBBEECRYPT_CXX_LT_REVISION = 0
+
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+SUBDIRS = lang io util security crypto beeyond . provider
+
+libaltdir=$(prefix)/lib@LIBALT@
+cxxdir=$(pkgincludedir)/c++
+
+libalt_LTLIBRARIES = libbeecrypt_cxx.la
+
+libbeecrypt_cxx_la_SOURCES = \
+adapter.cxx \
+bstream.cxx \
+resource.cxx
+
+libbeecrypt_cxx_la_LIBADD = ../libbeecrypt.la beeyond/libcxxbeeyond.la crypto/libcxxcrypto.la io/libcxxio.la lang/libcxxlang.la util/libcxxutil.la security/libcxxsecurity.la -licuuc -licuio
+libbeecrypt_cxx_la_LDFLAGS = -no-undefined -version-info $(LIBBEECRYPT_CXX_LT_CURRENT):$(LIBBEECRYPT_CXX_LT_REVISION):$(LIBBEECRYPT_CXX_LT_AGE)
+
+cxx_HEADERS = \
+array.h \
+bstream.h \
+mutex.h
+
+noinst_HEADERS = \
+adapter.h \
+resource.h
+
+TESTS = testdsa testrsa testks
+
+check_PROGRAMS = testdsa testrsa testks
+
+testdsa_SOURCES = testdsa.cxx
+testdsa_LDADD = libbeecrypt_cxx.la
+
+testrsa_SOURCES = testrsa.cxx
+testrsa_LDADD = libbeecrypt_cxx.la
+
+testks_SOURCES = testks.cxx
+testks_LDADD = libbeecrypt_cxx.la
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libbeecrypt_cxx_la_SOURCES) $(testdsa_SOURCES) $(testks_SOURCES) $(testrsa_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+check_PROGRAMS = testdsa$(EXEEXT) testrsa$(EXEEXT) testks$(EXEEXT)
+subdir = c++
+DIST_COMMON = $(cxx_HEADERS) $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(libaltdir)" "$(DESTDIR)$(cxxdir)"
+libaltLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(libalt_LTLIBRARIES)
+libbeecrypt_cxx_la_DEPENDENCIES = ../libbeecrypt.la \
+ beeyond/libcxxbeeyond.la crypto/libcxxcrypto.la io/libcxxio.la \
+ lang/libcxxlang.la util/libcxxutil.la \
+ security/libcxxsecurity.la
+am_libbeecrypt_cxx_la_OBJECTS = adapter.lo bstream.lo resource.lo
+libbeecrypt_cxx_la_OBJECTS = $(am_libbeecrypt_cxx_la_OBJECTS)
+am_testdsa_OBJECTS = testdsa.$(OBJEXT)
+testdsa_OBJECTS = $(am_testdsa_OBJECTS)
+testdsa_DEPENDENCIES = libbeecrypt_cxx.la
+am_testks_OBJECTS = testks.$(OBJEXT)
+testks_OBJECTS = $(am_testks_OBJECTS)
+testks_DEPENDENCIES = libbeecrypt_cxx.la
+am_testrsa_OBJECTS = testrsa.$(OBJEXT)
+testrsa_OBJECTS = $(am_testrsa_OBJECTS)
+testrsa_DEPENDENCIES = libbeecrypt_cxx.la
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libbeecrypt_cxx_la_SOURCES) $(testdsa_SOURCES) \
+ $(testks_SOURCES) $(testrsa_SOURCES)
+DIST_SOURCES = $(libbeecrypt_cxx_la_SOURCES) $(testdsa_SOURCES) \
+ $(testks_SOURCES) $(testrsa_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+cxxHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxx_HEADERS) $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+LIBBEECRYPT_CXX_LT_CURRENT = 8
+LIBBEECRYPT_CXX_LT_AGE = 2
+LIBBEECRYPT_CXX_LT_REVISION = 0
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+SUBDIRS = lang io util security crypto beeyond . provider
+libaltdir = $(prefix)/lib@LIBALT@
+cxxdir = $(pkgincludedir)/c++
+libalt_LTLIBRARIES = libbeecrypt_cxx.la
+libbeecrypt_cxx_la_SOURCES = \
+adapter.cxx \
+bstream.cxx \
+resource.cxx
+
+libbeecrypt_cxx_la_LIBADD = ../libbeecrypt.la beeyond/libcxxbeeyond.la crypto/libcxxcrypto.la io/libcxxio.la lang/libcxxlang.la util/libcxxutil.la security/libcxxsecurity.la -licuuc -licuio
+libbeecrypt_cxx_la_LDFLAGS = -no-undefined -version-info $(LIBBEECRYPT_CXX_LT_CURRENT):$(LIBBEECRYPT_CXX_LT_REVISION):$(LIBBEECRYPT_CXX_LT_AGE)
+cxx_HEADERS = \
+array.h \
+bstream.h \
+mutex.h
+
+noinst_HEADERS = \
+adapter.h \
+resource.h
+
+TESTS = testdsa testrsa testks
+testdsa_SOURCES = testdsa.cxx
+testdsa_LDADD = libbeecrypt_cxx.la
+testrsa_SOURCES = testrsa.cxx
+testrsa_LDADD = libbeecrypt_cxx.la
+testks_SOURCES = testks.cxx
+testks_LDADD = libbeecrypt_cxx.la
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-libaltLTLIBRARIES: $(libalt_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libaltdir)" || $(mkdir_p) "$(DESTDIR)$(libaltdir)"
+ @list='$(libalt_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(LIBTOOL) --mode=install $(libaltLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libaltdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(libaltLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libaltdir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-libaltLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libalt_LTLIBRARIES)'; for p in $$list; do \
+ p="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libaltdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libaltdir)/$$p"; \
+ done
+
+clean-libaltLTLIBRARIES:
+ -test -z "$(libalt_LTLIBRARIES)" || rm -f $(libalt_LTLIBRARIES)
+ @list='$(libalt_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libbeecrypt_cxx.la: $(libbeecrypt_cxx_la_OBJECTS) $(libbeecrypt_cxx_la_DEPENDENCIES)
+ $(CXXLINK) -rpath $(libaltdir) $(libbeecrypt_cxx_la_LDFLAGS) $(libbeecrypt_cxx_la_OBJECTS) $(libbeecrypt_cxx_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+testdsa$(EXEEXT): $(testdsa_OBJECTS) $(testdsa_DEPENDENCIES)
+ @rm -f testdsa$(EXEEXT)
+ $(CXXLINK) $(testdsa_LDFLAGS) $(testdsa_OBJECTS) $(testdsa_LDADD) $(LIBS)
+testks$(EXEEXT): $(testks_OBJECTS) $(testks_DEPENDENCIES)
+ @rm -f testks$(EXEEXT)
+ $(CXXLINK) $(testks_LDFLAGS) $(testks_OBJECTS) $(testks_LDADD) $(LIBS)
+testrsa$(EXEEXT): $(testrsa_OBJECTS) $(testrsa_DEPENDENCIES)
+ @rm -f testrsa$(EXEEXT)
+ $(CXXLINK) $(testrsa_LDFLAGS) $(testrsa_OBJECTS) $(testrsa_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxHEADERS: $(cxx_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxdir)" || $(mkdir_p) "$(DESTDIR)$(cxxdir)"
+ @list='$(cxx_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxdir)/$$f'"; \
+ $(cxxHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxdir)/$$f"; \
+ done
+
+uninstall-cxxHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxx_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxdir)/$$f"; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if (etags --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ else \
+ include_option=--include; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list='$(TESTS)'; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -n "$$skipped" && echo "$$skipped"; \
+ test -n "$$report" && echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || mkdir "$(distdir)/$$subdir" \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="../$(top_distdir)" \
+ distdir="../$(distdir)/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(libaltdir)" "$(DESTDIR)$(cxxdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libaltLTLIBRARIES \
+ clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-cxxHEADERS install-libaltLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-cxxHEADERS uninstall-info-am \
+ uninstall-libaltLTLIBRARIES
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic \
+ clean-libaltLTLIBRARIES clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-recursive distclean-tags distdir \
+ dvi dvi-am html html-am info info-am install install-am \
+ install-cxxHEADERS install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am \
+ install-libaltLTLIBRARIES install-man install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-recursive mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
+ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-cxxHEADERS uninstall-info-am \
+ uninstall-libaltLTLIBRARIES
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/adapter.h"
+
+using namespace beecrypt;
+
+int sraSetup(SecureRandom* random)
+{
+ return 0;
+}
+
+int sraSeed(SecureRandom* random, const byte* data, size_t size)
+{
+ random->setSeed(data, size);
+ return 0;
+}
+
+int sraNext(SecureRandom* random, byte* data, size_t size)
+{
+ random->nextBytes(data, size);
+ return 0;
+}
+
+int sraCleanup(SecureRandom* random)
+{
+ return 0;
+}
+
+const randomGenerator sraprng = {
+ "SecureRandom Adapter",
+ 0,
+ (randomGeneratorSetup) sraSetup,
+ (randomGeneratorSeed) sraSeed,
+ (randomGeneratorNext) sraNext,
+ (randomGeneratorCleanup) sraCleanup
+};
+
+randomGeneratorContextAdapter::randomGeneratorContextAdapter(SecureRandom* random) : randomGeneratorContext(&sraprng)
+{
+ param = (randomGeneratorParam*) random;
+}
+
+// SecureRandom systemsr;
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file adapter.h
+ * \brief In-between layer for BeeCrypt C and C++ code.
+ * \author Bob Deblier <bob.deblier@telenet.be>
+ */
+
+#ifndef _BEECRYPT_ADAPTER_H
+#define _BEECRYPT_ADAPTER_H
+
+#include "beecrypt/beecrypt.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/SecureRandom.h"
+using beecrypt::security::SecureRandom;
+
+namespace beecrypt {
+ /*!\brief Class which transforms a SecureRandom generator into a randomGeneratorContext.
+ */
+ struct BEECRYPTCXXAPI randomGeneratorContextAdapter : randomGeneratorContext
+ {
+ randomGeneratorContextAdapter(SecureRandom*);
+ };
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file array.h
+ * \brief Array template class.
+ * \author Bob Deblier <bob.deblier@telenet.be>
+ * \ingroup CXX_m
+ */
+
+#ifndef _TEMPLATE_ARRAY_H
+#define _TEMPLATE_ARRAY_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include <new>
+
+namespace beecrypt {
+
+ template <typename T>
+ class array
+ {
+ private:
+ T* _data;
+ size_t _size;
+
+ public:
+ array() throw ()
+ {
+ _data = 0;
+ _size = 0;
+ }
+
+ array(size_t size) throw (std::bad_alloc)
+ {
+ if (size)
+ {
+ _data = (T*) malloc(size * sizeof(T));
+ if (_data == 0)
+ throw std::bad_alloc();
+ }
+ else
+ _data = 0;
+ _size = size;
+ }
+
+ array(const T* data, size_t size) throw (std::bad_alloc)
+ {
+ _data = (T*) malloc(size * sizeof(T));
+ if (_data == 0)
+ throw std::bad_alloc();
+ _size = size;
+ memcpy(_data, data, _size * sizeof(T));
+ }
+
+ array(const array& _copy) throw (std::bad_alloc)
+ {
+ _data = (T*) malloc(_copy._size * sizeof(T));
+ if (_data == 0)
+ throw std::bad_alloc();
+ _size = _copy._size;
+ memcpy(_data, _copy._data, _size * sizeof(T));
+ }
+
+ ~array() throw ()
+ {
+ if (_data)
+ free(_data);
+ }
+
+ const array& operator=(const array& _set) throw (std::bad_alloc)
+ {
+ resize(_set._size);
+ if (_size)
+ memcpy(_data, _set._data, _size * sizeof(T));
+
+ return *this;
+ }
+
+ bool operator==(const array& _cmp) const throw ()
+ {
+ if (_size != _cmp.size)
+ return false;
+
+ if (_size == 0 && _cmp._size == 0)
+ return true;
+
+ return !memcmp(_data, _cmp._data, _size * sizeof(T));
+ }
+
+ bool operator!=(const array& _cmp) const throw ()
+ {
+ if (_size != _cmp._size)
+ return true;
+
+ if (_size == 0 && _cmp._size == 0)
+ return false;
+
+ return memcmp(_data, _cmp._data, _size * sizeof(T));
+ }
+
+ T* data() throw ()
+ {
+ return _data;
+ }
+
+ const T* data() const throw ()
+ {
+ return _data;
+ }
+
+ size_t size() const throw ()
+ {
+ return _size;
+ }
+
+ void resize(size_t _newsize) throw (std::bad_alloc)
+ {
+ if (_newsize)
+ {
+ _data = (T*) (_data ? realloc(_data, _newsize * sizeof(T)) : malloc(_newsize * sizeof(T)));
+ if (_data == 0)
+ throw std::bad_alloc();
+ }
+ else
+ {
+ if (_data)
+ {
+ free(_data);
+ _data = 0;
+ }
+ }
+ _size = _newsize;
+ }
+
+ T& operator[](size_t _n) throw ()
+ {
+ return _data[_n];
+ }
+
+ const T operator[](size_t _n) const throw ()
+ {
+ return _data[_n];
+ }
+
+ const array<T>& operator+=(const array<T>& _rhs) throw ()
+ {
+ if (_rhs._size)
+ {
+ size_t _curr = _size;
+ resize(_size+_rhs._size);
+ memcpy(_data+_curr, _rhs._data, _rhs._size * sizeof(T));
+ }
+ return *this;
+ }
+ };
+
+ template<typename T>
+ array<T> operator+(const array<T>& _lhs, const array<T>& _rhs)
+ {
+ array<T> _con(_lhs);
+
+ return _con += _rhs;
+ };
+
+ typedef array<byte> bytearray;
+ typedef array<javachar> javachararray;
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#include "beecrypt/c++/beeyond/AnyEncodedKeySpec.h"
+
+using namespace beecrypt::beeyond;
+
+AnyEncodedKeySpec::AnyEncodedKeySpec(const String& format, const byte* data, size_t size) : EncodedKeySpec(data, size), _format(format)
+{
+}
+
+AnyEncodedKeySpec::AnyEncodedKeySpec(const String& format, const bytearray& copy) : EncodedKeySpec(copy), _format(format)
+{
+}
+
+AnyEncodedKeySpec::~AnyEncodedKeySpec()
+{
+}
+
+const String& AnyEncodedKeySpec::getFormat() const throw ()
+{
+ return _format;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file AnyEncodedKeySpec.h
+ * \ingroup CXX_BEEYOND_m
+ */
+
+#ifndef _CLASS_ANYENCODEDKEYSPEC_H
+#define _CLASS_ANYENCODEDKEYSPEC_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/String.h"
+using beecrypt::lang::String;
+#include "beecrypt/c++/security/spec/EncodedKeySpec.h"
+using beecrypt::security::spec::EncodedKeySpec;
+
+namespace beecrypt {
+ namespace beeyond {
+ class BEECRYPTCXXAPI AnyEncodedKeySpec : public EncodedKeySpec
+ {
+ private:
+ String _format;
+
+ public:
+ AnyEncodedKeySpec(const String& format, const byte*, size_t);
+ AnyEncodedKeySpec(const String& format, const bytearray&);
+
+ virtual ~AnyEncodedKeySpec();
+
+ virtual const String& getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/beeyond/BeeCertificate.h"
+#include "beecrypt/c++/beeyond/AnyEncodedKeySpec.h"
+#include "beecrypt/c++/io/ByteArrayInputStream.h"
+using beecrypt::io::ByteArrayInputStream;
+#include "beecrypt/c++/io/ByteArrayOutputStream.h"
+using beecrypt::io::ByteArrayOutputStream;
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+#include "beecrypt/c++/security/Signature.h"
+using beecrypt::security::Signature;
+#include "beecrypt/c++/security/cert/CertificateFactory.h"
+using beecrypt::security::cert::CertificateFactory;
+
+using namespace beecrypt::beeyond;
+
+BeeCertificate::Field::~Field()
+{
+}
+
+BeeCertificate::UnknownField::UnknownField()
+{
+}
+
+BeeCertificate::UnknownField::UnknownField(const UnknownField& copy) : encoding(copy.encoding)
+{
+ type = copy.type;
+}
+
+BeeCertificate::UnknownField::~UnknownField()
+{
+}
+
+BeeCertificate::Field* BeeCertificate::UnknownField::clone() const
+{
+ return new BeeCertificate::UnknownField(*this);
+}
+
+void BeeCertificate::UnknownField::decode(DataInputStream& in) throw (IOException)
+{
+ encoding.resize(in.available());
+
+ in.readFully(encoding);
+}
+
+void BeeCertificate::UnknownField::encode(DataOutputStream& out) const throw (IOException)
+{
+ out.write(encoding);
+}
+
+const javaint BeeCertificate::PublicKeyField::FIELD_TYPE = 0x5055424b; // 'PUBK'
+
+BeeCertificate::PublicKeyField::PublicKeyField()
+{
+ type = BeeCertificate::PublicKeyField::FIELD_TYPE;
+ pub = 0;
+}
+
+BeeCertificate::PublicKeyField::PublicKeyField(const PublicKey& key)
+{
+ type = BeeCertificate::PublicKeyField::FIELD_TYPE;
+ pub = key.clone();
+}
+
+BeeCertificate::PublicKeyField::~PublicKeyField()
+{
+ delete pub;
+}
+
+BeeCertificate::Field* BeeCertificate::PublicKeyField::clone() const
+{
+ return new BeeCertificate::PublicKeyField(*pub);
+}
+
+void BeeCertificate::PublicKeyField::decode(DataInputStream& in) throw (IOException)
+{
+ String format;
+
+ in.readUTF(format);
+
+ // no need for a try-catch around this; calling function is expecting a thrown NoSuchAlgorithmException
+ KeyFactory* kf = KeyFactory::getInstance(format);
+
+ try
+ {
+ javaint encsize = in.readInt();
+
+ if (encsize <= 0)
+ throw IOException("Invalid key encoding size");
+
+ bytearray enc(encsize);
+
+ in.readFully(enc);
+
+ AnyEncodedKeySpec spec(format, enc);
+
+ pub = kf->generatePublic(spec);
+
+ delete kf;
+ }
+ catch (...)
+ {
+ delete kf;
+ throw;
+ }
+}
+
+void BeeCertificate::PublicKeyField::encode(DataOutputStream& out) const throw (IOException)
+{
+ out.writeUTF(*pub->getFormat());
+
+ const bytearray* pubenc = pub->getEncoded();
+
+ if (!pubenc)
+ throw NullPointerException("PublicKey has no encoding");
+
+ out.writeInt(pubenc->size());
+ out.write(*pubenc);
+}
+
+const javaint BeeCertificate::ParentCertificateField::FIELD_TYPE = 0x43455254; // 'CERT'
+
+BeeCertificate::ParentCertificateField::ParentCertificateField()
+{
+ type = BeeCertificate::ParentCertificateField::FIELD_TYPE;
+ parent = 0;
+}
+
+BeeCertificate::ParentCertificateField::ParentCertificateField(const Certificate& cert)
+{
+ type = BeeCertificate::ParentCertificateField::FIELD_TYPE;
+ parent = cert.clone();
+}
+
+BeeCertificate::ParentCertificateField::~ParentCertificateField()
+{
+ delete parent;
+}
+
+BeeCertificate::Field* BeeCertificate::ParentCertificateField::clone() const
+{
+ return new BeeCertificate::ParentCertificateField(*parent);
+}
+
+void BeeCertificate::ParentCertificateField::decode(DataInputStream& in) throw (IOException)
+{
+ String type;
+
+ in.readUTF(type);
+
+ CertificateFactory* cf = CertificateFactory::getInstance(type);
+
+ try
+ {
+ javaint encsize = in.readInt();
+
+ if (encsize <= 0)
+ throw IOException("Invalid certificate encoding size");
+
+ bytearray enc(encsize);
+
+ in.readFully(enc);
+
+ ByteArrayInputStream bin(enc);
+
+ parent = cf->generateCertificate(bin);
+
+ throw RuntimeException();
+
+ delete cf;
+ }
+ catch (...)
+ {
+ delete cf;
+ throw;
+ }
+}
+
+void BeeCertificate::ParentCertificateField::encode(DataOutputStream& out) const throw (IOException)
+{
+ out.writeUTF(parent->getType());
+
+ const bytearray& parentenc = parent->getEncoded();
+
+ out.writeInt(parentenc.size());
+ out.write(parentenc);
+}
+
+BeeCertificate::Field* BeeCertificate::instantiateField(javaint type)
+{
+ switch (type)
+ {
+ case PublicKeyField::FIELD_TYPE:
+ return new PublicKeyField();
+
+ case ParentCertificateField::FIELD_TYPE:
+ return new ParentCertificateField();
+
+ default:
+ return new UnknownField();
+ }
+}
+
+const Date BeeCertificate::FOREVER((javalong) -1L);
+
+BeeCertificate::BeeCertificate() : Certificate("BEE")
+{
+ enc = 0;
+}
+
+BeeCertificate::BeeCertificate(InputStream& in) throw (IOException) : Certificate("BEE")
+{
+ enc = 0;
+
+ DataInputStream dis(in);
+
+ dis.readUTF(issuer);
+ dis.readUTF(subject);
+
+ created.setTime(dis.readLong());
+ expires.setTime(dis.readLong());
+
+ javaint fieldcount = dis.readInt();
+ if (fieldcount < 0)
+ throw IOException("field count < 0");
+
+ for (javaint i = 0; i < fieldcount; i++)
+ {
+ bytearray fenc;
+
+ javaint type = dis.readInt();
+ javaint size = dis.readInt();
+
+ fenc.resize(size);
+
+ dis.readFully(fenc);
+
+ ByteArrayInputStream bis(fenc);
+ DataInputStream fis(bis);
+
+ Field* f = instantiateField(type);
+
+ try
+ {
+ f->decode(fis);
+ fields.push_back(f);
+ }
+ catch (...)
+ {
+ delete f;
+ throw;
+ }
+ }
+
+ dis.readUTF(signature_algorithm);
+
+ javaint siglength = dis.readInt();
+
+ if (siglength < 0)
+ throw IOException("signature length < 0");
+
+ if (siglength > 0)
+ {
+ signature.resize(siglength);
+ dis.readFully(signature);
+ }
+}
+
+BeeCertificate::BeeCertificate(const BeeCertificate& copy) : Certificate("BEE")
+{
+ issuer = copy.issuer;
+ subject = copy.subject;
+ created = copy.created;
+ expires = copy.expires;
+ for (fields_const_iterator it = copy.fields.begin(); it != copy.fields.end(); it++)
+ fields.push_back((*it)->clone());
+ signature_algorithm = copy.signature_algorithm;
+ signature = copy.signature;
+ enc = 0;
+}
+
+BeeCertificate::~BeeCertificate()
+{
+ if (enc)
+ delete enc;
+}
+
+BeeCertificate* BeeCertificate::clone() const
+{
+ return new BeeCertificate(*this);
+}
+
+const bytearray& BeeCertificate::getEncoded() const
+{
+ if (!enc)
+ {
+ // The following sequence shouldn't throw an exception
+ ByteArrayOutputStream bos;
+ DataOutputStream dos(bos);
+
+ dos.writeUTF(issuer);
+ dos.writeUTF(subject);
+ dos.writeLong(created.getTime());
+ dos.writeLong(expires.getTime());
+ dos.writeInt(fields.size());
+
+ for (fields_vector::const_iterator it = fields.begin(); it != fields.end(); it++)
+ {
+ ByteArrayOutputStream bout;
+ DataOutputStream dout(bout);
+
+ Field* f = (*it);
+
+ f->encode(dout);
+ dout.close();
+
+ bytearray* fenc = bout.toByteArray();
+
+ dos.writeInt(f->type);
+ dos.writeInt(fenc->size());
+ dos.write(*fenc);
+
+ delete fenc;
+ }
+
+ dos.writeUTF(signature_algorithm);
+ dos.writeInt(signature.size());
+ dos.write(signature);
+ dos.close();
+ bos.close();
+
+ enc = bos.toByteArray();
+ }
+
+ return *enc;
+}
+
+const PublicKey& BeeCertificate::getPublicKey() const
+{
+ for (fields_const_iterator it = fields.begin(); it != fields.end(); it++)
+ {
+ if ((*it)->type == PublicKeyField::FIELD_TYPE)
+ {
+ const PublicKeyField* f = dynamic_cast<const PublicKeyField*>(*it);
+
+ if (f)
+ return *f->pub;
+ else
+ throw GeneralSecurityException("Somebody's trying to cheat with a new Field subclass");
+ }
+ }
+
+ throw CertificateException("BeeCertificate doesn't contain a PublicKey");
+}
+
+const Certificate& BeeCertificate::getParentCertificate() const
+{
+ for (fields_const_iterator it = fields.begin(); it != fields.end(); it++)
+ {
+ if ((*it)->type == ParentCertificateField::FIELD_TYPE)
+ {
+ const ParentCertificateField* f = dynamic_cast<const ParentCertificateField*>(*it);
+
+ if (f)
+ return *f->parent;
+ else
+ throw GeneralSecurityException("Somebody's trying to cheat with a new Field subclass");
+ }
+ }
+
+ throw CertificateException("BeeCertificate doesn't contain a parent Certificate");
+}
+
+void BeeCertificate::verify(const PublicKey& pub) throw (CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException)
+{
+ Signature* sig = Signature::getInstance(signature_algorithm);
+
+ try
+ {
+ sig->initVerify(pub);
+
+ bytearray* tmp = encodeTBS();
+
+ try
+ {
+ sig->update(*tmp);
+ delete tmp;
+ }
+ catch (...)
+ {
+ delete tmp;
+ throw;
+ }
+
+ if (!sig->verify(signature))
+ throw CertificateException("signature doesn't match");
+
+ delete sig;
+ }
+ catch (...)
+ {
+ delete sig;
+ throw;
+ }
+}
+
+void BeeCertificate::verify(const PublicKey& pub, const String& sigProvider) throw (CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException)
+{
+ Signature* sig = Signature::getInstance(signature_algorithm, sigProvider);
+
+ try
+ {
+ sig->initVerify(pub);
+
+ bytearray* tmp = encodeTBS();
+
+ try
+ {
+ sig->update(*tmp);
+ delete tmp;
+ }
+ catch (...)
+ {
+ delete tmp;
+ throw;
+ }
+
+ if (!sig->verify(signature))
+ throw CertificateException("signature doesn't match");
+
+ delete sig;
+ }
+ catch (...)
+ {
+ delete sig;
+ throw;
+ }
+}
+
+const String& BeeCertificate::toString() const throw ()
+{
+ if (!str)
+ str = new String();
+
+ return *str;
+}
+
+void BeeCertificate::checkValidity() const throw (CertificateExpiredException, CertificateNotYetValidException)
+{
+ Date now;
+
+ checkValidity(now);
+}
+
+void BeeCertificate::checkValidity(const Date& at) const throw (CertificateExpiredException, CertificateNotYetValidException)
+{
+ if (at.before(created))
+ throw CertificateNotYetValidException();
+
+ if (expires != FOREVER)
+ if (at.after(expires))
+ throw CertificateExpiredException();
+}
+
+const Date& BeeCertificate::getNotAfter() const throw ()
+{
+ return expires;
+}
+
+const Date& BeeCertificate::getNotBefore() const throw ()
+{
+ return created;
+}
+
+const bytearray& BeeCertificate::getSignature() const throw ()
+{
+ return signature;
+}
+
+const String& BeeCertificate::getSigAlgName() const throw ()
+{
+ return signature_algorithm;
+}
+
+bool BeeCertificate::hasPublicKey() const
+{
+ for (fields_vector::const_iterator it = fields.begin(); it != fields.end(); it++)
+ {
+ switch ((*it)->type)
+ {
+ case PublicKeyField::FIELD_TYPE:
+ // do an extra check with dynamic_cast
+ if (dynamic_cast<PublicKeyField*>(*it))
+ return true;
+ else
+ throw GeneralSecurityException("Somebody's trying to cheat with a new Field subclass");
+ }
+ }
+ return false;
+}
+
+bool BeeCertificate::hasParentCertificate() const
+{
+ for (fields_vector::const_iterator it = fields.begin(); it != fields.end(); it++)
+ {
+ switch ((*it)->type)
+ {
+ case ParentCertificateField::FIELD_TYPE:
+ // do an extra check with dynamic_cast
+ if (dynamic_cast<ParentCertificateField*>(*it))
+ return true;
+ else
+ throw GeneralSecurityException("Somebody's trying to cheat with a new Field subclass");
+ }
+ }
+ return false;
+}
+
+bytearray* BeeCertificate::encodeTBS() const
+{
+ ByteArrayOutputStream bos;
+ DataOutputStream dos(bos);
+
+ dos.writeUTF(issuer);
+ dos.writeUTF(subject);
+ dos.writeLong(created.getTime());
+ dos.writeLong(expires.getTime());
+ dos.writeInt(fields.size());
+ for (fields_vector::const_iterator it = fields.begin(); it != fields.end(); it++)
+ {
+ Field* f = (*it);
+
+ dos.writeInt(f->type);
+ f->encode(dos);
+ }
+
+ dos.close();
+ bos.close();
+ return bos.toByteArray();
+}
+
+BeeCertificate* BeeCertificate::self(const PublicKey& pub, const PrivateKey& pri, const String& signatureAlgorithm) throw (InvalidKeyException, NoSuchAlgorithmException)
+{
+ // if the public key doesn't have an encoding, it's not worth going through the effort
+ if (!pub.getEncoded())
+ throw InvalidKeyException("PublicKey doesn't have an encoding");
+
+ Signature* sig = Signature::getInstance(signatureAlgorithm);
+
+ try
+ {
+ sig->initSign(pri);
+
+ BeeCertificate* cert = new BeeCertificate();
+
+ try
+ {
+ // issuer is kept blank
+ cert->subject = "PublicKey Certificate";
+ cert->expires = FOREVER;
+ cert->signature_algorithm = signatureAlgorithm;
+ cert->fields.push_back(new PublicKeyField(pub));
+
+ bytearray* tmp = cert->encodeTBS();
+
+ try
+ {
+ sig->update(*tmp);
+ delete tmp;
+ }
+ catch (...)
+ {
+ delete tmp;
+ throw;
+ }
+
+ sig->sign(cert->signature);
+ }
+ catch (...)
+ {
+ delete cert;
+ throw;
+ }
+
+ delete sig;
+
+ return cert;
+ }
+ catch (...)
+ {
+ delete sig;
+ throw;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeCertificate.h
+ * \ingroup CXX_BEEYOND_m
+ */
+
+#ifndef _CLASS_BEECERTIFICATE_H
+#define _CLASS_BEECERTIFICATE_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::array;
+#include "beecrypt/c++/io/DataInputStream.h"
+using beecrypt::io::DataInputStream;
+#include "beecrypt/c++/io/DataOutputStream.h"
+using beecrypt::io::DataOutputStream;
+#include "beecrypt/c++/provider/BeeCertificateFactory.h"
+using beecrypt::provider::BeeCertificateFactory;
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+#include "beecrypt/c++/security/PrivateKey.h"
+using beecrypt::security::PrivateKey;
+#include "beecrypt/c++/security/cert/Certificate.h"
+using beecrypt::security::cert::Certificate;
+#include "beecrypt/c++/security/cert/CertificateExpiredException.h"
+using beecrypt::security::cert::CertificateExpiredException;
+#include "beecrypt/c++/security/cert/CertificateNotYetValidException.h"
+using beecrypt::security::cert::CertificateNotYetValidException;
+#include "beecrypt/c++/util/Date.h"
+using beecrypt::util::Date;
+
+#include <vector>
+using std::vector;
+
+namespace beecrypt {
+ namespace beeyond {
+ /* We use short certificate chains, embedded in the certificate as parent certificates
+ * Issuer is informational
+ * Subject is used to identify the type of certificate
+ */
+ class BEECRYPTCXXAPI BeeCertificate : public Certificate
+ {
+ friend class BeeCertificateFactory;
+
+ public:
+ static const Date FOREVER;
+
+ protected:
+ struct Field
+ {
+ javaint type;
+
+ virtual ~Field();
+
+ virtual Field* clone() const = 0;
+
+ virtual void decode(DataInputStream&) throw (IOException) = 0;
+ virtual void encode(DataOutputStream&) const throw (IOException) = 0;
+ };
+
+ struct UnknownField : public Field
+ {
+ bytearray encoding;
+
+ UnknownField();
+ UnknownField(const UnknownField&);
+ virtual ~UnknownField();
+
+ virtual Field* clone() const;
+
+ virtual void decode(DataInputStream&) throw (IOException);
+ virtual void encode(DataOutputStream&) const throw (IOException);
+ };
+
+ struct PublicKeyField : public Field
+ {
+ static const javaint FIELD_TYPE;
+
+ PublicKey* pub;
+
+ PublicKeyField();
+ PublicKeyField(const PublicKey& key);
+ virtual ~PublicKeyField();
+
+ virtual Field* clone() const;
+
+ virtual void decode(DataInputStream&) throw (IOException);
+ virtual void encode(DataOutputStream&) const throw (IOException);
+ };
+
+ struct ParentCertificateField : public Field
+ {
+ static const javaint FIELD_TYPE;
+
+ Certificate* parent;
+
+ ParentCertificateField();
+ ParentCertificateField(const Certificate&);
+ virtual ~ParentCertificateField();
+
+ virtual Field* clone() const;
+
+ virtual void decode(DataInputStream&) throw (IOException);
+ virtual void encode(DataOutputStream&) const throw (IOException);
+ };
+
+ virtual Field* instantiateField(javaint type);
+
+ public:
+ typedef vector<Field*> fields_vector;
+ typedef vector<Field*>::iterator fields_iterator;
+ typedef vector<Field*>::const_iterator fields_const_iterator;
+
+ protected:
+ String issuer;
+ String subject;
+ Date created;
+ Date expires;
+ fields_vector fields;
+ String signature_algorithm;
+ bytearray signature;
+
+ mutable bytearray* enc;
+ mutable String* str;
+
+ BeeCertificate();
+ BeeCertificate(InputStream& in) throw (IOException);
+
+ bytearray* encodeTBS() const;
+
+ public:
+ BeeCertificate(const BeeCertificate&);
+ virtual ~BeeCertificate();
+
+ virtual BeeCertificate* clone() const;
+
+ virtual const bytearray& getEncoded() const;
+ virtual const PublicKey& getPublicKey() const;
+
+ virtual void verify(const PublicKey&) throw (CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException);
+ virtual void verify(const PublicKey&, const String&) throw (CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException);
+ virtual const String& toString() const throw ();
+
+ void checkValidity() const throw (CertificateExpiredException, CertificateNotYetValidException);
+ void checkValidity(const Date&) const throw (CertificateExpiredException, CertificateNotYetValidException);
+
+ const String& getIssuer() const throw ();
+ const String& getSubject() const throw ();
+
+ const Date& getNotAfter() const throw ();
+ const Date& getNotBefore() const throw ();
+
+ const bytearray& getSignature() const throw ();
+ const String& getSigAlgName() const throw ();
+
+ bool hasPublicKey() const;
+ bool hasParentCertificate() const;
+
+ const Certificate& getParentCertificate() const;
+
+ public:
+ static BeeCertificate* self(const PublicKey&, const PrivateKey&, const String& sigAlgName) throw (InvalidKeyException, NoSuchAlgorithmException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#include "beecrypt/c++/beeyond/BeeEncodedKeySpec.h"
+
+using namespace beecrypt::beeyond;
+
+BeeEncodedKeySpec::BeeEncodedKeySpec(const byte* data, size_t size) : EncodedKeySpec(data, size)
+{
+}
+
+BeeEncodedKeySpec::BeeEncodedKeySpec(const bytearray& copy) : EncodedKeySpec(copy)
+{
+}
+
+BeeEncodedKeySpec::~BeeEncodedKeySpec()
+{
+}
+
+const String& BeeEncodedKeySpec::getFormat() const throw ()
+{
+ static const String* format = 0;
+
+ if (!format)
+ format = new String("BEE");
+
+ return *format;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeEncodedKeySpec.h
+ * \ingroup CXX_BEEYOND_m
+ */
+
+#ifndef _CLASS_BEEENCODEDKEYSPEC_H
+#define _CLASS_BEEENCODEDKEYSPEC_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/EncodedKeySpec.h"
+using beecrypt::security::spec::EncodedKeySpec;
+
+namespace beecrypt {
+ namespace beeyond {
+ class BEECRYPTCXXAPI BeeEncodedKeySpec : public EncodedKeySpec
+ {
+ public:
+ BeeEncodedKeySpec(const byte*, size_t);
+ BeeEncodedKeySpec(const bytearray&);
+
+ virtual ~BeeEncodedKeySpec();
+
+ virtual const String& getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/beeyond/BeeInputStream.h"
+
+using namespace beecrypt::beeyond;
+
+BeeInputStream::BeeInputStream(InputStream& in) : DataInputStream(in)
+{
+}
+
+BeeInputStream::~BeeInputStream()
+{
+}
+
+void BeeInputStream::read(mpnumber& n) throw (IOException)
+{
+ int size = readInt();
+ byte* data = new byte[size];
+
+ try
+ {
+ readFully(data, 0, size);
+ mpnsetbin(&n, data, size);
+ delete[] data;
+ }
+ catch (IOException)
+ {
+ // free buffer
+ delete[] data;
+ // re-throw exception
+ throw;
+ }
+}
+
+void BeeInputStream::read(mpbarrett& b) throw (IOException)
+{
+ int size = readInt();
+ byte* data = new byte[size];
+
+ try
+ {
+ readFully(data, 0, size);
+ mpbsetbin(&b, data, size);
+ delete[] data;
+ }
+ catch (IOException)
+ {
+ // free buffer
+ delete[] data;
+ // re-throw exception
+ throw;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeInputStream.h
+ * \ingroup CXX_BEEYOND_m
+ */
+
+#ifndef _CLASS_BEEINPUTSTREAM_H
+#define _CLASS_BEEINPUTSTREAM_H
+
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/DataInputStream.h"
+using beecrypt::io::DataInputStream;
+
+namespace beecrypt {
+ namespace beeyond {
+ class BEECRYPTCXXAPI BeeInputStream : public DataInputStream
+ {
+ public:
+ BeeInputStream(InputStream& in);
+ virtual ~BeeInputStream();
+
+ void read(mpnumber&) throw (IOException);
+ void read(mpbarrett&) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/beeyond/BeeOutputStream.h"
+
+using namespace beecrypt::beeyond;
+
+BeeOutputStream::BeeOutputStream(OutputStream& out) : DataOutputStream(out)
+{
+}
+
+BeeOutputStream::~BeeOutputStream()
+{
+}
+
+void BeeOutputStream::write(const mpnumber& n) throw (IOException)
+{
+ size_t bits = n.bitlength();
+ size_t length = ((bits + 7) >> 3) + (((bits & 7) == 0) ? 1 : 0);
+
+ byte* buffer = new byte[length];
+
+ try
+ {
+ i2osp(buffer, length, n.data, n.size);
+
+ DataOutputStream::writeInt(length);
+ DataOutputStream::write(buffer, 0, length);
+
+ delete[] buffer;
+ }
+ catch (IOException)
+ {
+ delete[] buffer;
+ throw;
+ }
+}
+
+void BeeOutputStream::write(const mpbarrett& b) throw (IOException)
+{
+ size_t bits = b.bitlength();
+ size_t length = ((bits + 7) >> 3) + (((bits & 7) == 0) ? 1 : 0);
+
+ byte* buffer = new byte[length];
+
+ try
+ {
+ i2osp(buffer, length, b.modl, b.size);
+
+ DataOutputStream::writeInt(length);
+ DataOutputStream::write(buffer, 0, length);
+
+ delete[] buffer;
+ }
+ catch (IOException)
+ {
+ delete[] buffer;
+ throw;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeOutputStream.h
+ * \ingroup CXX_BEEYOND_m
+ */
+
+#ifndef _CLASS_BEEOUTPUTSTREAM_H
+#define _CLASS_BEEOUTPUTSTREAM_H
+
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/DataOutputStream.h"
+using beecrypt::io::DataOutputStream;
+
+namespace beecrypt {
+ namespace beeyond {
+ class BEECRYPTCXXAPI BeeOutputStream : public DataOutputStream
+ {
+ public:
+ BeeOutputStream(OutputStream& out);
+ virtual ~BeeOutputStream();
+
+ void write(const mpnumber&) throw (IOException);
+ void write(const mpbarrett&) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+LIBS = -licuuc -licuio
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+noinst_LTLIBRARIES = libcxxbeeyond.la
+
+libcxxbeeyond_la_SOURCES = \
+AnyEncodedKeySpec.cxx \
+BeeCertificate.cxx \
+BeeEncodedKeySpec.cxx \
+BeeInputStream.cxx \
+BeeOutputStream.cxx \
+PKCS12PBEKey.cxx
+
+noinst_HEADERS = \
+AnyEncodedKeySpec.h \
+BeeCertificate.h \
+BeeEncodedKeySpec.h \
+BeeInputStream.h \
+BeeOutputStream.h \
+PKCS12PBEKey.h
+
+TESTS = testcert
+
+check_PROGRAMS = testcert
+
+testcert_SOURCES = testcert.cxx
+testcert_LDADD = ../libbeecrypt_cxx.la
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxbeeyond_la_SOURCES) $(testcert_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+check_PROGRAMS = testcert$(EXEEXT)
+subdir = c++/beeyond
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxbeeyond_la_LIBADD =
+am_libcxxbeeyond_la_OBJECTS = AnyEncodedKeySpec.lo BeeCertificate.lo \
+ BeeEncodedKeySpec.lo BeeInputStream.lo BeeOutputStream.lo \
+ PKCS12PBEKey.lo
+libcxxbeeyond_la_OBJECTS = $(am_libcxxbeeyond_la_OBJECTS)
+am_testcert_OBJECTS = testcert.$(OBJEXT)
+testcert_OBJECTS = $(am_testcert_OBJECTS)
+testcert_DEPENDENCIES = ../libbeecrypt_cxx.la
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxbeeyond_la_SOURCES) $(testcert_SOURCES)
+DIST_SOURCES = $(libcxxbeeyond_la_SOURCES) $(testcert_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = -licuuc -licuio
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+noinst_LTLIBRARIES = libcxxbeeyond.la
+libcxxbeeyond_la_SOURCES = \
+AnyEncodedKeySpec.cxx \
+BeeCertificate.cxx \
+BeeEncodedKeySpec.cxx \
+BeeInputStream.cxx \
+BeeOutputStream.cxx \
+PKCS12PBEKey.cxx
+
+noinst_HEADERS = \
+AnyEncodedKeySpec.h \
+BeeCertificate.h \
+BeeEncodedKeySpec.h \
+BeeInputStream.h \
+BeeOutputStream.h \
+PKCS12PBEKey.h
+
+TESTS = testcert
+testcert_SOURCES = testcert.cxx
+testcert_LDADD = ../libbeecrypt_cxx.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/beeyond/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/beeyond/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxbeeyond.la: $(libcxxbeeyond_la_OBJECTS) $(libcxxbeeyond_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxbeeyond_la_LDFLAGS) $(libcxxbeeyond_la_OBJECTS) $(libcxxbeeyond_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+testcert$(EXEEXT): $(testcert_OBJECTS) $(testcert_DEPENDENCIES)
+ @rm -f testcert$(EXEEXT)
+ $(CXXLINK) $(testcert_LDFLAGS) $(testcert_OBJECTS) $(testcert_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list='$(TESTS)'; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -n "$$skipped" && echo "$$skipped"; \
+ test -n "$$report" && echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES ctags distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/beeyond/PKCS12PBEKey.h"
+
+#include <iostream>
+using std::cout;
+using std::endl;
+
+using namespace beecrypt::beeyond;
+
+PKCS12PBEKey::PKCS12PBEKey(const array<javachar>& password, const bytearray* salt, size_t iterationCount) : _pswd(password)
+{
+ if (salt)
+ _salt = new bytearray(*salt);
+ else
+ _salt = 0;
+ _iter = iterationCount;
+ _enc = 0;
+}
+
+PKCS12PBEKey::~PKCS12PBEKey()
+{
+ if (_salt)
+ delete _salt;
+}
+
+PKCS12PBEKey* PKCS12PBEKey::clone() const
+{
+ return new PKCS12PBEKey(_pswd, _salt, _iter);
+}
+
+bytearray* PKCS12PBEKey::encode(const array<javachar>& password, const bytearray* salt, size_t iterationCount)
+{
+ size_t i;
+
+ bytearray* result = new bytearray((password.size() + 1) * 2);
+
+ for (i = 0; i < password.size(); i++)
+ {
+ (*result)[2*i ] = (password[i] >> 8) & 0xff;
+ (*result)[2*i+1] = (password[i] ) & 0xff;
+ }
+ (*result)[2*i ] = 0;
+ (*result)[2*i+1] = 0;
+
+ return result;
+}
+
+size_t PKCS12PBEKey::getIterationCount() const throw ()
+{
+ return _iter;
+}
+
+const array<javachar>& PKCS12PBEKey::getPassword() const throw ()
+{
+ return _pswd;
+}
+
+const bytearray* PKCS12PBEKey::getSalt() const throw ()
+{
+ return _salt;
+}
+
+const bytearray* PKCS12PBEKey::getEncoded() const
+{
+ if (!_enc)
+ _enc = encode(_pswd, _salt, _iter);
+
+ return _enc;
+}
+
+const String& PKCS12PBEKey::getAlgorithm() const throw ()
+{
+ static const String ALGORITHM = UNICODE_STRING_SIMPLE("PKCS#12/PBE");
+ return ALGORITHM;
+}
+
+const String* PKCS12PBEKey::getFormat() const throw ()
+{
+ static const String FORMAT = UNICODE_STRING_SIMPLE("RAW");
+ return &FORMAT;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PKCS12PBEKey.h
+ * \ingroup CXX_BEEYOND_m
+ */
+
+#ifndef _CLASS_PKCS12PBEKEY_H
+#define _CLASS_PKCS12PBEKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::array;
+using beecrypt::bytearray;
+#include "beecrypt/c++/crypto/interfaces/PBEKey.h"
+using beecrypt::crypto::interfaces::PBEKey;
+
+namespace beecrypt {
+ namespace beeyond {
+ class BEECRYPTCXXAPI PKCS12PBEKey : public PBEKey
+ {
+ private:
+ array<javachar> _pswd;
+ bytearray* _salt;
+ size_t _iter;
+ mutable bytearray* _enc;
+
+ public:
+ static bytearray* encode(const array<javachar>&, const bytearray*, size_t);
+
+ public:
+ PKCS12PBEKey(const array<javachar>&, const bytearray*, size_t);
+ virtual ~PKCS12PBEKey();
+
+ virtual PKCS12PBEKey* clone() const;
+
+ virtual size_t getIterationCount() const throw ();
+ virtual const array<javachar>& getPassword() const throw ();
+ virtual const bytearray* getSalt() const throw ();
+
+ virtual const bytearray* getEncoded() const;
+
+ virtual const String& getAlgorithm() const throw();
+ virtual const String* getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "c++/bstream.h"
+#include "c++/beeyond/BeeCertificate.h"
+using beecrypt::beeyond::BeeCertificate;
+#include "c++/io/ByteArrayInputStream.h"
+using beecrypt::io::ByteArrayInputStream;
+#include "c++/security/AlgorithmParameterGenerator.h"
+using beecrypt::security::AlgorithmParameterGenerator;
+#include "c++/security/AlgorithmParameters.h"
+using beecrypt::security::AlgorithmParameters;
+#include "c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+#include "c++/security/KeyPairGenerator.h"
+using beecrypt::security::KeyPairGenerator;
+#include "c++/security/Signature.h"
+using beecrypt::security::Signature;
+#include "c++/security/cert/CertificateFactory.h"
+using beecrypt::security::cert::CertificateFactory;
+#include "c++/security/spec/EncodedKeySpec.h"
+using beecrypt::security::spec::EncodedKeySpec;
+
+#include <iostream>
+using namespace std;
+#include <unicode/ustream.h>
+
+int main(int argc, char* argv[])
+{
+ int failures = 0;
+
+ try
+ {
+ KeyPairGenerator* kpg = KeyPairGenerator::getInstance("DSA");
+
+ kpg->initialize(1024);
+
+ KeyPair* pair = kpg->generateKeyPair();
+
+ cout << "keypair generated" << endl << flush;
+
+ BeeCertificate* self = BeeCertificate::self(pair->getPublic(), pair->getPrivate(), "SHA1withDSA");
+
+ cout << "self generated" << endl << flush;
+
+ ByteArrayInputStream bis(self->getEncoded());
+
+ CertificateFactory* cf = CertificateFactory::getInstance("BEE");
+
+ cout << "got cf" << endl << flush;
+
+ Certificate* cert = cf->generateCertificate(bis);
+
+ cout << "verifying" << endl << flush;
+
+ cert->verify(pair->getPublic());
+
+ cout << "verified" << endl << flush;
+
+ if (!(*cert == *self))
+ {
+ cerr << "certificates differ" << endl;
+ failures++;
+ }
+ else
+ cout << "certificates equal" << endl << flush;
+
+ delete cert;
+ delete cf;
+ delete self;
+ delete pair;
+ delete kpg;
+ }
+ catch (Exception& ex)
+ {
+ std::cerr << "exception: " << ex.getMessage();
+ std::cerr << " type " << typeid(ex).name() << std::endl;
+ failures++;
+ }
+ catch (...)
+ {
+ std::cerr << "exception" << std::endl;
+ failures++;
+ }
+ return failures;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#include "beecrypt/c++/bstream.h"
+
+#include "beecrypt/c++/crypto/interfaces/DHPublicKey.h"
+using beecrypt::crypto::interfaces::DHPublicKey;
+#include "beecrypt/c++/security/interfaces/DSAPublicKey.h"
+using beecrypt::security::interfaces::DSAPublicKey;
+#include "beecrypt/c++/security/interfaces/RSAPublicKey.h"
+using beecrypt::security::interfaces::RSAPublicKey;
+
+#include <unicode/ustream.h>
+
+using namespace beecrypt;
+
+ostream& operator<<(ostream& stream, const PublicKey& pub)
+{
+ stream << pub.getAlgorithm() << " public key" << endl;
+
+ const DHPublicKey* dh = dynamic_cast<const DHPublicKey*>(&pub);
+ if (dh)
+ {
+ return stream << "P = " << dh->getParams().getP() << endl <<
+ "G = " << dh->getParams().getG() << endl <<
+ "Y = " << dh->getY() << endl;
+ }
+
+ const DSAPublicKey* dsa = dynamic_cast<const DSAPublicKey*>(&pub);
+ if (dsa)
+ {
+ return stream << "P = " << dsa->getParams().getP() << endl <<
+ "Q = " << dsa->getParams().getQ() << endl <<
+ "G = " << dsa->getParams().getG() << endl <<
+ "Y = " << dsa->getY() << endl;
+ }
+
+ const RSAPublicKey* rsa = dynamic_cast<const RSAPublicKey*>(&pub);
+ if (rsa)
+ {
+ return stream << "N = " << rsa->getModulus() << endl <<
+ "E = " << rsa->getPublicExponent() << endl;
+ }
+
+ return stream;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file bstream.h
+ * \brief C++ Object-to-stream output.
+ * \author Bob Deblier <bob.deblier@telenet.be>
+ */
+
+#ifndef _BEECRYPT_STREAM_H
+#define _BEECRYPT_STREAM_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include <iostream>
+using std::cout;
+using std::ostream;
+using std::endl;
+
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+
+namespace beecrypt {
+ BEECRYPTCXXAPI
+ ostream& operator<<(ostream& stream, const PublicKey&);
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/crypto/BadPaddingException.h"
+
+using namespace beecrypt::crypto;
+
+BadPaddingException::BadPaddingException() throw ()
+{
+}
+
+BadPaddingException::BadPaddingException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BadPaddingException.h
+ * \ingroup CXX_CRYPTO_m
+ */
+
+#ifndef _CLASS_BADPADDINGEXCEPTION_H
+#define _CLASS_BADPADDINGEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace crypto {
+ class BEECRYPTCXXAPI BadPaddingException : public GeneralSecurityException
+ {
+ public:
+ BadPaddingException() throw ();
+ BadPaddingException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/crypto/Mac.h"
+#include "beecrypt/c++/lang/IllegalArgumentException.h"
+using beecrypt::lang::IllegalArgumentException;
+#include "beecrypt/c++/security/Security.h"
+using beecrypt::security::Security;
+
+using namespace beecrypt::crypto;
+
+Mac::Mac(MacSpi* spi, const String& algorithm, const Provider& provider)
+{
+ _mspi = spi;
+ _algo = algorithm;
+ _prov = &provider;
+ _init = false;
+}
+
+Mac::~Mac()
+{
+ delete _mspi;
+}
+
+Mac* Mac::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "Mac");
+
+ Mac* result = new Mac((MacSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+Mac* Mac::getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "Mac", provider);
+
+ Mac* result = new Mac((MacSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+Mac* Mac::getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "Mac", provider);
+
+ Mac* result = new Mac((MacSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+Mac* Mac::clone() const
+{
+ MacSpi* _mspc = _mspi->clone();
+
+ if (_mspc)
+ {
+ // don't forget to also clone the _init state!
+ Mac* result = new Mac(_mspc, _algo, *_prov);
+ result->_init = _init;
+ return result;
+ }
+ else
+ return 0;
+}
+
+const bytearray& Mac::doFinal() throw (IllegalStateException)
+{
+ if (!_init)
+ throw IllegalStateException();
+
+ return _mspi->engineDoFinal();
+}
+
+const bytearray& Mac::doFinal(const bytearray& b) throw (IllegalStateException)
+{
+ if (!_init)
+ throw IllegalStateException();
+
+ _mspi->engineUpdate(b.data(), 0, b.size());
+ return _mspi->engineDoFinal();
+}
+
+size_t Mac::doFinal(byte* data, size_t offset, size_t length) throw (IllegalStateException, ShortBufferException)
+{
+ if (!_init)
+ throw IllegalStateException();
+
+ return _mspi->engineDoFinal(data, offset, length);
+}
+
+size_t Mac::getMacLength()
+{
+ return _mspi->engineGetMacLength();
+}
+
+void Mac::init(const Key& key) throw (InvalidKeyException)
+{
+ try
+ {
+ _mspi->engineInit(key, 0);
+ }
+ catch (InvalidAlgorithmParameterException)
+ {
+ throw IllegalArgumentException("Mac apparently requires an AlgorithmParameterSpec");
+ }
+ _init = true;
+}
+
+void Mac::init(const Key& key, const AlgorithmParameterSpec* spec) throw (InvalidKeyException, InvalidAlgorithmParameterException)
+{
+ _mspi->engineInit(key, spec);
+ _init = true;
+}
+
+void Mac::reset()
+{
+ _mspi->engineReset();
+}
+
+void Mac::update(byte b) throw (IllegalStateException)
+{
+ if (!_init)
+ throw IllegalStateException();
+
+ _mspi->engineUpdate(b);
+}
+
+void Mac::update(const bytearray& b) throw (IllegalStateException)
+{
+ if (!_init)
+ throw IllegalStateException();
+
+ _mspi->engineUpdate(b.data(), 0, b.size());
+}
+
+void Mac::update(const byte* data, size_t offset, size_t length) throw (IllegalStateException)
+{
+ if (!_init)
+ throw IllegalStateException();
+
+ _mspi->engineUpdate(data, offset, length);
+}
+
+const String& Mac::getAlgorithm() const throw ()
+{
+ return _algo;
+}
+
+const Provider& Mac::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Mac.h
+ * \ingroup CXX_CRYPTO_m
+ */
+
+#ifndef _CLASS_MAC_H
+#define _CLASS_MAC_H
+
+// #include "beecrypt/beecrypt.api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/MacSpi.h"
+using beecrypt::crypto::MacSpi;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+namespace beecrypt {
+ namespace crypto {
+ class BEECRYPTCXXAPI Mac
+ {
+ public:
+ static Mac* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static Mac* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static Mac* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ private:
+ MacSpi* _mspi;
+ String _algo;
+ const Provider* _prov;
+ bool _init;
+
+ protected:
+ Mac(MacSpi*, const String&, const Provider&);
+
+ public:
+ ~Mac();
+
+ Mac* clone() const;
+
+ const bytearray& doFinal() throw (IllegalStateException);
+ const bytearray& doFinal(const bytearray&) throw (IllegalStateException);
+ size_t doFinal(byte* data, size_t offset, size_t length) throw (ShortBufferException, IllegalStateException);
+ size_t getMacLength();
+ void init(const Key&) throw (InvalidKeyException);
+ void init(const Key&, const AlgorithmParameterSpec*) throw (InvalidKeyException, InvalidAlgorithmParameterException);
+ void reset();
+ void update(byte) throw (IllegalStateException);
+ void update(const byte* data, size_t offset, size_t length) throw (IllegalStateException);
+ void update(const bytearray&) throw (IllegalStateException);
+
+ const String& getAlgorithm() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/crypto/MacInputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::crypto;
+
+MacInputStream::MacInputStream(InputStream& in, Mac& m) : FilterInputStream(in), mac(m)
+{
+ _on = true;
+}
+
+MacInputStream::~MacInputStream()
+{
+}
+
+int MacInputStream::read() throw (IOException)
+{
+ int rc = in.read();
+ if (rc >= 0 && _on)
+ mac.update((byte) rc);
+ return rc;
+}
+
+int MacInputStream::read(byte *data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ int rc = in.read(data, offset, length);
+ if (rc >= 0 && _on)
+ mac.update(data, offset, rc);
+ return rc;
+}
+
+void MacInputStream::on(bool on)
+{
+ _on = on;
+}
+
+Mac& MacInputStream::getMac()
+{
+ return mac;
+}
+
+void MacInputStream::setMac(Mac& m)
+{
+ mac = m;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file MacInputStream.h
+ * \ingroup CXX_CRYPTO_m
+ */
+
+#ifndef _CLASS_MACINPUTSTREAM_H
+#define _CLASS_MACINPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/Mac.h"
+using beecrypt::crypto::Mac;
+#include "beecrypt/c++/io/FilterInputStream.h"
+using beecrypt::io::FilterInputStream;
+
+namespace beecrypt {
+ namespace crypto {
+ class BEECRYPTCXXAPI MacInputStream : public FilterInputStream
+ {
+ private:
+ bool _on;
+
+ protected:
+ Mac& mac;
+
+ public:
+ MacInputStream(InputStream&, Mac&);
+ virtual ~MacInputStream();
+
+ virtual int read() throw (IOException);
+ virtual int read(byte* data, size_t offset, size_t length) throw (IOException);
+
+ void on(bool);
+
+ Mac& getMac();
+ void setMac(Mac&);
+
+ };
+ }
+}
+
+#endif
+
+#endif
+
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/crypto/MacOutputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::crypto;
+
+MacOutputStream::MacOutputStream(OutputStream& out, Mac& m) : FilterOutputStream(out), mac(m)
+{
+ _on = true;
+}
+
+MacOutputStream::~MacOutputStream()
+{
+}
+
+void MacOutputStream::write(byte b) throw (IOException)
+{
+ out.write(b);
+ if (_on)
+ mac.update(b);
+}
+
+void MacOutputStream::write(const byte *data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ out.write(data, offset, length);
+ if (_on)
+ mac.update(data, offset, length);
+}
+
+void MacOutputStream::on(bool on)
+{
+ _on = on;
+}
+
+Mac& MacOutputStream::getMac()
+{
+ return mac;
+}
+
+void MacOutputStream::setMac(Mac& m)
+{
+ mac = m;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file MacOutputStream.h
+ * \ingroup CXX_CRYPTO_m
+ */
+
+#ifndef _CLASS_MACOUTPUTSTREAM_H
+#define _CLASS_MACOUTPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/Mac.h"
+using beecrypt::crypto::Mac;
+#include "beecrypt/c++/io/FilterOutputStream.h"
+using beecrypt::io::FilterOutputStream;
+
+namespace beecrypt {
+ namespace crypto {
+ class BEECRYPTCXXAPI MacOutputStream : public FilterOutputStream
+ {
+ private:
+ bool _on;
+
+ protected:
+ Mac& mac;
+
+ public:
+ MacOutputStream(OutputStream&, Mac&);
+ virtual ~MacOutputStream();
+
+ virtual void write(byte) throw (IOException);
+ virtual void write(const byte* data, size_t offset, size_t length) throw (IOException);
+
+ void on(bool);
+
+ Mac& getMac();
+ void setMac(Mac&);
+
+ };
+ }
+}
+
+#endif
+
+#endif
+
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file MacSpi.h
+ * \ingroup CXX_CRYPTO_m
+ */
+
+#ifndef _CLASS_MACSPI_H
+#define _CLASS_MACSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::array;
+#include "beecrypt/c++/lang/IllegalStateException.h"
+using beecrypt::lang::IllegalStateException;
+#include "beecrypt/c++/security/InvalidAlgorithmParameterException.h"
+using beecrypt::security::InvalidAlgorithmParameterException;
+#include "beecrypt/c++/security/InvalidKeyException.h"
+using beecrypt::security::InvalidKeyException;
+#include "beecrypt/c++/security/Key.h"
+using beecrypt::security::Key;
+#include "beecrypt/c++/security/ShortBufferException.h"
+using beecrypt::security::ShortBufferException;
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+namespace beecrypt {
+ namespace crypto {
+ class BEECRYPTCXXAPI MacSpi
+ {
+ friend class Mac;
+
+ protected:
+ virtual const bytearray& engineDoFinal() = 0;
+ virtual size_t engineDoFinal(byte*, size_t, size_t) throw (ShortBufferException) = 0;
+ virtual size_t engineGetMacLength() = 0;
+ virtual void engineInit(const Key&, const AlgorithmParameterSpec*) throw (InvalidKeyException, InvalidAlgorithmParameterException) = 0;
+ virtual void engineReset() = 0;
+ virtual void engineUpdate(byte) = 0;
+ virtual void engineUpdate(const byte*, size_t, size_t) = 0;
+
+ public:
+ virtual ~MacSpi() {};
+
+ virtual MacSpi* clone() const = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+SUBDIRS = interfaces spec
+
+noinst_LTLIBRARIES = libcxxcrypto.la
+
+cxxcryptodir=$(pkgincludedir)/c++/crypto
+
+libcxxcrypto_la_SOURCES = \
+BadPaddingException.cxx \
+Mac.cxx \
+MacInputStream.cxx \
+MacOutputStream.cxx \
+SecretKeyFactory.cxx
+libcxxcrypto_la_LIBADD = spec/libcxxcryptospec.la
+
+cxxcrypto_HEADERS = \
+BadPaddingException.h \
+Mac.h \
+MacInputStream.h \
+MacOutputStream.h \
+MacSpi.h \
+SecretKey.h \
+SecretKeyFactory.h \
+SecretKeyFactorySpi.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxcrypto_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/crypto
+DIST_COMMON = $(cxxcrypto_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxcrypto_la_DEPENDENCIES = spec/libcxxcryptospec.la
+am_libcxxcrypto_la_OBJECTS = BadPaddingException.lo Mac.lo \
+ MacInputStream.lo MacOutputStream.lo SecretKeyFactory.lo
+libcxxcrypto_la_OBJECTS = $(am_libcxxcrypto_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxcrypto_la_SOURCES)
+DIST_SOURCES = $(libcxxcrypto_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+am__installdirs = "$(DESTDIR)$(cxxcryptodir)"
+cxxcryptoHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxcrypto_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+SUBDIRS = interfaces spec
+noinst_LTLIBRARIES = libcxxcrypto.la
+cxxcryptodir = $(pkgincludedir)/c++/crypto
+libcxxcrypto_la_SOURCES = \
+BadPaddingException.cxx \
+Mac.cxx \
+MacInputStream.cxx \
+MacOutputStream.cxx \
+SecretKeyFactory.cxx
+
+libcxxcrypto_la_LIBADD = spec/libcxxcryptospec.la
+cxxcrypto_HEADERS = \
+BadPaddingException.h \
+Mac.h \
+MacInputStream.h \
+MacOutputStream.h \
+MacSpi.h \
+SecretKey.h \
+SecretKeyFactory.h \
+SecretKeyFactorySpi.h
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/crypto/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/crypto/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxcrypto.la: $(libcxxcrypto_la_OBJECTS) $(libcxxcrypto_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxcrypto_la_LDFLAGS) $(libcxxcrypto_la_OBJECTS) $(libcxxcrypto_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxcryptoHEADERS: $(cxxcrypto_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxcryptodir)" || $(mkdir_p) "$(DESTDIR)$(cxxcryptodir)"
+ @list='$(cxxcrypto_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxcryptoHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxcryptodir)/$$f'"; \
+ $(cxxcryptoHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxcryptodir)/$$f"; \
+ done
+
+uninstall-cxxcryptoHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxcrypto_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxcryptodir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxcryptodir)/$$f"; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if (etags --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ else \
+ include_option=--include; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || mkdir "$(distdir)/$$subdir" \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="../$(top_distdir)" \
+ distdir="../$(distdir)/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(cxxcryptodir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-cxxcryptoHEADERS
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-cxxcryptoHEADERS uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ clean-recursive ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am \
+ install-cxxcryptoHEADERS install-data install-data-am \
+ install-exec install-exec-am install-info install-info-am \
+ install-man install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-cxxcryptoHEADERS uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SecretKey.h
+ * \ingroup CXX_CRYPTO_m
+ */
+
+#ifndef _INTERFACE_SECRETKEY_H
+#define _INTERFACE_SECRETKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/Key.h"
+using beecrypt::security::Key;
+
+namespace beecrypt {
+ namespace crypto {
+ /*!\brief SecretKey interface
+ * \ingroup CXX_CRYPTO_m
+ */
+ class BEECRYPTCXXAPI SecretKey : public Key
+ {
+ public:
+ virtual SecretKey* clone() const = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/crypto/SecretKeyFactory.h"
+#include "beecrypt/c++/security/Security.h"
+using beecrypt::security::Security;
+
+using namespace beecrypt::crypto;
+
+SecretKeyFactory::SecretKeyFactory(SecretKeyFactorySpi* spi, const String& algorithm, const Provider& provider)
+{
+ _kspi = spi;
+ _algo = algorithm;
+ _prov = &provider;
+}
+
+SecretKeyFactory::~SecretKeyFactory()
+{
+ delete _kspi;
+}
+
+SecretKeyFactory* SecretKeyFactory::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "SecretKeyFactory");
+
+ SecretKeyFactory* result = new SecretKeyFactory((SecretKeyFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+SecretKeyFactory* SecretKeyFactory::getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "SecretKeyFactory", provider);
+
+ SecretKeyFactory* result = new SecretKeyFactory((SecretKeyFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+SecretKeyFactory* SecretKeyFactory::getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "SecretKeyFactory", provider);
+
+ SecretKeyFactory* result = new SecretKeyFactory((SecretKeyFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+SecretKey* SecretKeyFactory::generateSecret(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ return _kspi->engineGenerateSecret(spec);
+}
+
+KeySpec* SecretKeyFactory::getKeySpec(const SecretKey& key, const type_info& info) throw (InvalidKeySpecException)
+{
+ return _kspi->engineGetKeySpec(key, info);
+}
+
+SecretKey* SecretKeyFactory::translateKey(const SecretKey& key) throw (InvalidKeyException)
+{
+ return _kspi->engineTranslateKey(key);
+}
+
+const String& SecretKeyFactory::getAlgorithm() const throw ()
+{
+ return _algo;
+}
+
+const Provider& SecretKeyFactory::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SecretKeyFactory.h
+ * \ingroup CXX_CRYPTO_m
+ */
+
+#ifndef _CLASS_SECRETKEYFACTORY_H
+#define _CLASS_SECRETKEYFACTORY_H
+
+// #include "beecrypt/beecrypt.api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/SecretKeyFactorySpi.h"
+using beecrypt::crypto::SecretKeyFactorySpi;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+#include <typeinfo>
+using std::type_info;
+
+namespace beecrypt {
+ namespace crypto {
+ class BEECRYPTCXXAPI SecretKeyFactory
+ {
+ public:
+ static SecretKeyFactory* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static SecretKeyFactory* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static SecretKeyFactory* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ private:
+ SecretKeyFactorySpi* _kspi;
+ String _algo;
+ const Provider* _prov;
+
+ protected:
+ SecretKeyFactory(SecretKeyFactorySpi*, const String&, const Provider&);
+
+ public:
+ ~SecretKeyFactory();
+
+ SecretKey* generateSecret(const KeySpec&) throw (InvalidKeySpecException);
+
+ KeySpec* getKeySpec(const SecretKey& key, const type_info&) throw (InvalidKeySpecException);
+
+ SecretKey* translateKey(const SecretKey&) throw (InvalidKeyException);
+
+ const String& getAlgorithm() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SecretKeyFactorySpi.h
+ * \ingroup CXX_CRYPTO_m
+ */
+
+#ifndef _CLASS_SECRETKEYFACTORYSPI_H
+#define _CLASS_SECRETKEYFACTORYSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/SecretKey.h"
+using beecrypt::crypto::SecretKey;
+#include "beecrypt/c++/security/InvalidKeyException.h"
+using beecrypt::security::InvalidKeyException;
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+#include "beecrypt/c++/security/spec/InvalidKeySpecException.h"
+using beecrypt::security::spec::InvalidKeySpecException;
+
+#include <typeinfo>
+using std::type_info;
+
+namespace beecrypt {
+ namespace crypto {
+ class BEECRYPTCXXAPI SecretKeyFactorySpi
+ {
+ friend class SecretKeyFactory;
+
+ protected:
+ virtual SecretKey* engineGenerateSecret(const KeySpec&) throw (InvalidKeySpecException) = 0;
+ virtual KeySpec* engineGetKeySpec(const SecretKey&, const type_info&) throw (InvalidKeySpecException) = 0;
+ virtual SecretKey* engineTranslateKey(const SecretKey&) throw (InvalidKeyException) = 0;
+
+ public:
+ virtual ~SecretKeyFactorySpi() {};
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHKey.h
+ * \ingroup CXX_CRYPTO_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_DHKEY_H
+#define _INTERFACE_DHKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/interfaces/DHParams.h"
+using beecrypt::crypto::interfaces::DHParams;
+
+namespace beecrypt {
+ namespace crypto {
+ namespace interfaces {
+ /*!\brief Diffie-Hellman key interface.
+ * \ingroup CXX_IF_m
+ */
+ class DHKey
+ {
+ public:
+ virtual const DHParams& getParams() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHParams.h
+ * \ingroup CXX_CRYPTO_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_DHPARAMS_H
+#define _INTERFACE_DHPARAMS_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+namespace beecrypt {
+ namespace crypto {
+ namespace interfaces {
+ class DHParams
+ {
+ public:
+ virtual const mpbarrett& getP() const throw () = 0;
+ virtual const mpnumber& getG() const throw () = 0;
+ virtual size_t getL() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHPrivateKey.h
+ * \ingroup CXX_CRYPTO_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_DHPRIVATEKEY_H
+#define _INTERFACE_DHPRIVATEKEY_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/dldp.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/PrivateKey.h"
+using beecrypt::security::PrivateKey;
+#include "beecrypt/c++/crypto/interfaces/DHKey.h"
+using beecrypt::crypto::interfaces::DHKey;
+
+namespace beecrypt {
+ namespace crypto {
+ namespace interfaces {
+ /*!\brief Diffie-Hellman PrivateKey interface
+ * \ingroup CXX_IF_m
+ */
+ class DHPrivateKey : public PrivateKey, public DHKey
+ {
+ public:
+ virtual const mpnumber& getX() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHPublicKey.h
+ * \ingroup CXX_CRYPTO_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_DHPUBLICKEY_H
+#define _INTERFACE_DHPUBLICKEY_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpnumber.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+#include "beecrypt/c++/crypto/interfaces/DHKey.h"
+using beecrypt::crypto::interfaces::DHKey;
+
+namespace beecrypt {
+ namespace crypto {
+ namespace interfaces {
+ /*!\brief Diffie-Hellman PublicKey interface
+ * \ingroup CXX_IF_m
+ */
+ class DHPublicKey : public PublicKey, public DHKey
+ {
+ public:
+ virtual const mpnumber& getY() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+cxxcryptointerfacesdir=$(pkgincludedir)/c++/crypto/interfaces
+
+cxxcryptointerfaces_HEADERS =\
+DHKey.h \
+DHParams.h \
+DHPrivateKey.h \
+DHPublicKey.h \
+PBEKey.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/crypto/interfaces
+DIST_COMMON = $(cxxcryptointerfaces_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+am__installdirs = "$(DESTDIR)$(cxxcryptointerfacesdir)"
+cxxcryptointerfacesHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxcryptointerfaces_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+cxxcryptointerfacesdir = $(pkgincludedir)/c++/crypto/interfaces
+cxxcryptointerfaces_HEADERS = \
+DHKey.h \
+DHParams.h \
+DHPrivateKey.h \
+DHPublicKey.h \
+PBEKey.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/crypto/interfaces/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/crypto/interfaces/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxcryptointerfacesHEADERS: $(cxxcryptointerfaces_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxcryptointerfacesdir)" || $(mkdir_p) "$(DESTDIR)$(cxxcryptointerfacesdir)"
+ @list='$(cxxcryptointerfaces_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxcryptointerfacesHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxcryptointerfacesdir)/$$f'"; \
+ $(cxxcryptointerfacesHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxcryptointerfacesdir)/$$f"; \
+ done
+
+uninstall-cxxcryptointerfacesHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxcryptointerfaces_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxcryptointerfacesdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxcryptointerfacesdir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(cxxcryptointerfacesdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cxxcryptointerfacesHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cxxcryptointerfacesHEADERS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool ctags distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am \
+ install-cxxcryptointerfacesHEADERS install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-cxxcryptointerfacesHEADERS \
+ uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PBEKey.h
+ * \ingroup CXX_CRYPTO_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_PBEKEY_H
+#define _INTERFACE_PBEKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/SecretKey.h"
+using beecrypt::crypto::SecretKey;
+
+namespace beecrypt {
+ namespace crypto {
+ namespace interfaces {
+ /*!\brief PBEKey interface
+ * \ingroup CXX_CRYPTO_m
+ */
+ class BEECRYPTCXXAPI PBEKey : public SecretKey
+ {
+ public:
+ virtual size_t getIterationCount() const throw () = 0;
+ virtual const array<javachar>& getPassword() const throw () = 0;
+ virtual const bytearray* getSalt() const throw () = 0;
+
+ virtual PBEKey* clone() const = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#include "beecrypt/c++/crypto/spec/DHParameterSpec.h"
+
+using namespace beecrypt::crypto::spec;
+
+DHParameterSpec::DHParameterSpec(const DHParams& copy)
+{
+ _p = copy.getP();
+ _g = copy.getG();
+ _l = copy.getL();
+}
+
+DHParameterSpec::DHParameterSpec(const mpbarrett& p, const mpnumber& g)
+{
+ _p = p;
+ _g = g;
+ _l = 0;
+}
+
+DHParameterSpec::DHParameterSpec(const mpbarrett& p, const mpnumber& g, size_t l)
+{
+ _p = p;
+ _g = g;
+ _l = l;
+}
+
+DHParameterSpec::~DHParameterSpec()
+{
+}
+
+const mpbarrett& DHParameterSpec::getP() const throw ()
+{
+ return _p;
+}
+
+const mpnumber& DHParameterSpec::getG() const throw ()
+{
+ return _g;
+}
+
+size_t DHParameterSpec::getL() const throw ()
+{
+ return _l;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHParameterSpec.h
+ * \ingroup CXX_CRYPTO_SPEC_m
+ */
+
+#ifndef _CLASS_DHPARAMETERSPEC_H
+#define _CLASS_DHPARAMETERSPEC_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+#include "beecrypt/dlsvdp-dh.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/interfaces/DHParams.h"
+using beecrypt::crypto::interfaces::DHParams;
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+namespace beecrypt {
+ namespace crypto {
+ namespace spec {
+ class BEECRYPTCXXAPI DHParameterSpec : public AlgorithmParameterSpec, public DHParams
+ {
+ private:
+ mpbarrett _p;
+ mpnumber _g;
+ size_t _l;
+
+ public:
+ DHParameterSpec(const DHParams&);
+ DHParameterSpec(const mpbarrett& p, const mpnumber& g);
+ DHParameterSpec(const mpbarrett& p, const mpnumber& g, size_t l);
+ virtual ~DHParameterSpec();
+
+ const mpbarrett& getP() const throw ();
+ const mpnumber& getG() const throw ();
+ size_t getL() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#include "beecrypt/c++/crypto/spec/DHPrivateKeySpec.h"
+
+using namespace beecrypt::crypto::spec;
+
+DHPrivateKeySpec::DHPrivateKeySpec(const mpbarrett& p, const mpnumber& g, const mpnumber& x)
+{
+ _p = p;
+ _g = g;
+ _x = x;
+}
+
+DHPrivateKeySpec::~DHPrivateKeySpec()
+{
+ _x.wipe();
+}
+
+const mpbarrett& DHPrivateKeySpec::getP() const throw ()
+{
+ return _p;
+}
+
+const mpnumber& DHPrivateKeySpec::getG() const throw ()
+{
+ return _g;
+}
+
+const mpnumber& DHPrivateKeySpec::getX() const throw ()
+{
+ return _x;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHPrivateKeySpec.h
+ * \ingroup CXX_CRYPTO_SPEC_m
+ */
+
+#ifndef _CLASS_DHPRIVATEKEYSPEC_H
+#define _CLASS_DHPRIVATEKEYSPEC_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace crypto {
+ namespace spec {
+ class BEECRYPTCXXAPI DHPrivateKeySpec : public KeySpec
+ {
+ private:
+ mpbarrett _p;
+ mpnumber _g;
+ mpnumber _x;
+
+ public:
+ DHPrivateKeySpec(const mpbarrett& p, const mpnumber& g, const mpnumber& x);
+ virtual ~DHPrivateKeySpec();
+
+ const mpbarrett& getP() const throw ();
+ const mpnumber& getG() const throw ();
+ const mpnumber& getX() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#include "beecrypt/c++/crypto/spec/DHPublicKeySpec.h"
+
+using namespace beecrypt::crypto::spec;
+
+DHPublicKeySpec::DHPublicKeySpec(const mpbarrett& p, const mpnumber& g, const mpnumber& y)
+{
+ _p = p;
+ _g = g;
+ _y = y;
+}
+
+DHPublicKeySpec::~DHPublicKeySpec()
+{
+}
+
+const mpbarrett& DHPublicKeySpec::getP() const throw ()
+{
+ return _p;
+}
+
+const mpnumber& DHPublicKeySpec::getG() const throw ()
+{
+ return _g;
+}
+
+const mpnumber& DHPublicKeySpec::getY() const throw ()
+{
+ return _y;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHPublicKeySpec.h
+ * \ingroup CXX_CRYPTO_SPEC_m
+ */
+
+#ifndef _CLASS_DHPUBLICKEYSPEC_H
+#define _CLASS_DHPUBLICKEYSPEC_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace crypto {
+ namespace spec {
+ class BEECRYPTCXXAPI DHPublicKeySpec : public KeySpec
+ {
+ private:
+ mpbarrett _p;
+ mpnumber _g;
+ mpnumber _y;
+
+ public:
+ DHPublicKeySpec(const mpbarrett& p, const mpnumber& g, const mpnumber& y);
+ virtual ~DHPublicKeySpec();
+
+ const mpbarrett& getP() const throw ();
+ const mpnumber& getG() const throw ();
+ const mpnumber& getY() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+noinst_LTLIBRARIES = libcxxcryptospec.la
+
+cxxcryptospecdir=$(pkgincludedir)/c++/crypto/spec
+
+libcxxcryptospec_la_SOURCES =\
+DHParameterSpec.cxx \
+DHPrivateKeySpec.cxx \
+DHPublicKeySpec.cxx \
+PBEKeySpec.cxx
+
+cxxcryptospec_HEADERS =\
+DHParameterSpec.h \
+DHPrivateKeySpec.h \
+DHPublicKeySpec.h \
+PBEKeySpec.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxcryptospec_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/crypto/spec
+DIST_COMMON = $(cxxcryptospec_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxcryptospec_la_LIBADD =
+am_libcxxcryptospec_la_OBJECTS = DHParameterSpec.lo \
+ DHPrivateKeySpec.lo DHPublicKeySpec.lo PBEKeySpec.lo
+libcxxcryptospec_la_OBJECTS = $(am_libcxxcryptospec_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxcryptospec_la_SOURCES)
+DIST_SOURCES = $(libcxxcryptospec_la_SOURCES)
+am__installdirs = "$(DESTDIR)$(cxxcryptospecdir)"
+cxxcryptospecHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxcryptospec_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+noinst_LTLIBRARIES = libcxxcryptospec.la
+cxxcryptospecdir = $(pkgincludedir)/c++/crypto/spec
+libcxxcryptospec_la_SOURCES = \
+DHParameterSpec.cxx \
+DHPrivateKeySpec.cxx \
+DHPublicKeySpec.cxx \
+PBEKeySpec.cxx
+
+cxxcryptospec_HEADERS = \
+DHParameterSpec.h \
+DHPrivateKeySpec.h \
+DHPublicKeySpec.h \
+PBEKeySpec.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/crypto/spec/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/crypto/spec/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxcryptospec.la: $(libcxxcryptospec_la_OBJECTS) $(libcxxcryptospec_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxcryptospec_la_LDFLAGS) $(libcxxcryptospec_la_OBJECTS) $(libcxxcryptospec_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxcryptospecHEADERS: $(cxxcryptospec_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxcryptospecdir)" || $(mkdir_p) "$(DESTDIR)$(cxxcryptospecdir)"
+ @list='$(cxxcryptospec_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxcryptospecHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxcryptospecdir)/$$f'"; \
+ $(cxxcryptospecHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxcryptospecdir)/$$f"; \
+ done
+
+uninstall-cxxcryptospecHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxcryptospec_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxcryptospecdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxcryptospecdir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(cxxcryptospecdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cxxcryptospecHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cxxcryptospecHEADERS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-cxxcryptospecHEADERS install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-cxxcryptospecHEADERS \
+ uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/crypto/spec/PBEKeySpec.h"
+
+using namespace beecrypt::crypto::spec;
+
+PBEKeySpec::PBEKeySpec(const array<javachar>* password) : _password(password ? *password : 0)
+{
+ _salt = 0;
+ _iteration_count = 0;
+ _key_length = 0;
+}
+
+PBEKeySpec::PBEKeySpec(const array<javachar>* password, const bytearray* salt, size_t iterationCount, size_t keyLength) : _password(password ? *password : 0)
+{
+ if (salt)
+ _salt = new bytearray(*salt);
+ _iteration_count = iterationCount;
+ _key_length = keyLength;
+}
+
+PBEKeySpec::~PBEKeySpec()
+{
+}
+
+const array<javachar>& PBEKeySpec::getPassword() const throw ()
+{
+ return _password;
+}
+
+const bytearray* PBEKeySpec::getSalt() const throw ()
+{
+ return _salt;
+}
+
+size_t PBEKeySpec::getIterationCount() const throw ()
+{
+ return _iteration_count;
+}
+
+size_t PBEKeySpec::getKeyLength() const throw ()
+{
+ return _key_length;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PBEKeySpec.h
+ * \ingroup CXX_CRYPTO_SPEC_m
+ */
+
+#ifndef _CLASS_PBEKEYSPEC_H
+#define _CLASS_PBEKEYSPEC_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::array;
+using beecrypt::bytearray;
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace crypto {
+ namespace spec {
+ class BEECRYPTCXXAPI PBEKeySpec : public KeySpec
+ {
+ private:
+ array<javachar> _password;
+ bytearray* _salt;
+ size_t _iteration_count;
+ size_t _key_length;
+
+ public:
+ PBEKeySpec(const array<javachar>* password);
+ PBEKeySpec(const array<javachar>* password, const bytearray* salt, size_t iterationCount, size_t keyLength);
+ virtual ~PBEKeySpec();
+
+ const array<javachar>& getPassword() const throw ();
+ const bytearray* getSalt() const throw ();
+ size_t getIterationCount() const throw ();
+ size_t getKeyLength() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/ByteArrayInputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::io;
+
+ByteArrayInputStream::ByteArrayInputStream(const bytearray& b) : _buf(b)
+{
+ _lock.init();
+ _count = _buf.size();
+ _mark = 0;
+ _pos = 0;
+}
+
+ByteArrayInputStream::ByteArrayInputStream(const byte* data, size_t offset, size_t length) : _buf(data+offset, length)
+{
+ _lock.init();
+ _count = _buf.size();
+ _mark = 0;
+ _pos = 0;
+}
+
+ByteArrayInputStream::~ByteArrayInputStream()
+{
+ _lock.destroy();
+}
+
+off_t ByteArrayInputStream::available() throw (IOException)
+{
+ return (off_t)(_count - _pos);
+}
+
+void ByteArrayInputStream::close() throw (IOException)
+{
+}
+
+void ByteArrayInputStream::mark(off_t readlimit) throw ()
+{
+ _mark = _pos;
+}
+
+bool ByteArrayInputStream::markSupported() throw ()
+{
+ return true;
+}
+
+int ByteArrayInputStream::read() throw (IOException)
+{
+ register int rc;
+ _lock.lock();
+ rc = (_pos < _count) ? _buf[_pos++] : -1;
+ _lock.unlock();
+ return rc;
+}
+
+int ByteArrayInputStream::read(byte* data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ _lock.lock();
+ if (_pos >= _count)
+ {
+ _lock.unlock();
+ return -1;
+ }
+
+ if (_pos + length > _count)
+ length = _count - _pos;
+
+ if (length == 0)
+ {
+ _lock.unlock();
+ return 0;
+ }
+
+ memcpy(data+offset, _buf.data()+_pos, length);
+ _pos += length;
+
+ _lock.unlock();
+
+ return length;
+}
+
+int ByteArrayInputStream::read(bytearray& b) throw (IOException)
+{
+ return read(b.data(), 0, b.size());
+}
+
+void ByteArrayInputStream::reset() throw (IOException)
+{
+ _lock.lock();
+ _pos = _mark;
+ _lock.unlock();
+}
+
+off_t ByteArrayInputStream::skip(off_t n) throw (IOException)
+{
+ _lock.lock();
+ if (_pos + n > _count)
+ n = _count - _pos;
+ _pos += n;
+ _lock.unlock();
+ return n;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file ByteArrayInputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_BYTEARRAYINPUTSTREAM_H
+#define _CLASS_BYTEARRAYINPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/mutex.h"
+using beecrypt::mutex;
+#include "beecrypt/c++/io/InputStream.h"
+using beecrypt::io::InputStream;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI ByteArrayInputStream : public InputStream
+ {
+ private:
+ mutex _lock;
+
+ protected:
+ bytearray _buf;
+ size_t _count;
+ size_t _mark;
+ size_t _pos;
+
+ public:
+ ByteArrayInputStream(const byte* data, size_t offset, size_t length);
+ ByteArrayInputStream(const bytearray& b);
+ virtual ~ByteArrayInputStream();
+
+ virtual off_t available() throw (IOException);
+ virtual void close() throw (IOException);
+ virtual void mark(off_t readlimit) throw ();
+ virtual bool markSupported() throw ();
+ virtual int read() throw (IOException);
+ virtual int read(byte* data, size_t offset, size_t length) throw (IOException);
+ virtual int read(bytearray&) throw (IOException);
+ virtual void reset() throw (IOException);
+ virtual off_t skip(off_t n) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/ByteArrayOutputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::io;
+
+ByteArrayOutputStream::ByteArrayOutputStream() : _buf(32)
+{
+ _lock.init();
+ _count = 0;
+}
+
+ByteArrayOutputStream::ByteArrayOutputStream(size_t size) : _buf(size)
+{
+ _lock.init();
+ _count = 0;
+}
+
+ByteArrayOutputStream::~ByteArrayOutputStream()
+{
+ _lock.destroy();
+}
+
+void ByteArrayOutputStream::reset() throw ()
+{
+ _count = 0;
+}
+
+size_t ByteArrayOutputStream::size() throw ()
+{
+ return _count;
+}
+
+bytearray* ByteArrayOutputStream::toByteArray()
+{
+ bytearray* result = new bytearray();
+
+ toByteArray(*result);
+
+ return result;
+}
+
+void ByteArrayOutputStream::toByteArray(bytearray& b)
+{
+ _lock.lock();
+
+ b.resize(_count);
+ memcpy(b.data(), _buf.data(), _count);
+
+ _lock.unlock();
+}
+
+void ByteArrayOutputStream::close() throw (IOException)
+{
+}
+
+void ByteArrayOutputStream::flush() throw (IOException)
+{
+}
+
+void ByteArrayOutputStream::write(byte b) throw (IOException)
+{
+ _lock.lock();
+
+ size_t newcount = _count+1;
+ size_t actualsz = _buf.size();
+
+ if (actualsz < newcount)
+ {
+ if (actualsz == 0)
+ _buf.resize(32);
+ else
+ _buf.resize(actualsz << 1);
+ }
+
+ _buf[_count++] = b;
+
+ _lock.unlock();
+}
+
+void ByteArrayOutputStream::write(const byte* data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ _lock.lock();
+
+ size_t newcount = _count + length;
+ size_t actualsz = _buf.size();
+
+ if (newcount > actualsz)
+ {
+ _buf.resize(newcount > (actualsz << 1) ? newcount : (actualsz << 1));
+ }
+ memcpy(_buf.data()+_count, data, length);
+ _count += length;
+ _lock.unlock();
+}
+
+void ByteArrayOutputStream::write(const bytearray& b) throw (IOException)
+{
+ write(b.data(), 0, b.size());
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file ByteArrayOutputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_BYTEARRAYOUTPUTSTREAM_H
+#define _CLASS_BYTEARRAYOUTPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/mutex.h"
+using beecrypt::mutex;
+#include "beecrypt/c++/io/OutputStream.h"
+using beecrypt::io::OutputStream;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI ByteArrayOutputStream : public OutputStream
+ {
+ private:
+ mutex _lock;
+
+ protected:
+ bytearray _buf;
+ size_t _count;
+
+ public:
+ ByteArrayOutputStream();
+ ByteArrayOutputStream(size_t);
+ virtual ~ByteArrayOutputStream();
+
+ void reset() throw ();
+ size_t size() throw ();
+ bytearray* toByteArray();
+ void toByteArray(bytearray&);
+ void writeTo(OutputStream& out) throw (IOException);
+
+ virtual void close() throw (IOException);
+ virtual void flush() throw (IOException);
+ virtual void write(byte b) throw (IOException);
+ virtual void write(const byte* data, size_t offset, size_t length) throw (IOException);
+ virtual void write(const bytearray& b) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DataInput.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _INTERFACE_DATAINPUT_H
+#define _INTERFACE_DATAINPUT_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/io/IOException.h"
+using beecrypt::io::IOException;
+
+namespace beecrypt {
+ namespace io {
+ class DataInput
+ {
+ public:
+ virtual bool readBoolean() throw (IOException) = 0;
+ virtual javabyte readByte() throw (IOException) = 0;
+ virtual javachar readChar() throw (IOException) = 0;
+ virtual void readFully(byte*, size_t, size_t) = 0;
+ virtual void readFully(bytearray&) = 0;
+ virtual javaint readInt() throw (IOException) = 0;
+ virtual String* readLine() throw (IOException) = 0;
+ virtual void readLine(String&) throw (IOException) = 0;
+ virtual javalong readLong() throw (IOException) = 0;
+ virtual javashort readShort() throw (IOException) = 0;
+ virtual int readUnsignedByte() throw (IOException) = 0;
+ virtual int readUnsignedShort() throw (IOException) = 0;
+ virtual String* readUTF() throw (IOException) = 0;
+ virtual void readUTF(String&) throw (IOException) = 0;
+ virtual off_t skipBytes(off_t n) throw (IOException) = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/DataInputStream.h"
+#include "beecrypt/c++/io/EOFException.h"
+#include "beecrypt/c++/io/PushbackInputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+#define MAX_BYTES_PER_CHARACTER 8
+
+using namespace beecrypt::io;
+
+DataInputStream::DataInputStream(InputStream& in) : FilterInputStream(in)
+{
+ _pin = ∈
+ _del = false;
+ _utf = 0;
+ _loc = 0;
+}
+
+DataInputStream::~DataInputStream()
+{
+ if (_utf)
+ {
+ ucnv_close(_utf);
+ _utf = 0;
+ }
+
+ if (_loc)
+ {
+ ucnv_close(_loc);
+ _loc = 0;
+ }
+
+ if (_del)
+ {
+ delete _pin;
+ _pin = 0;
+ }
+}
+
+bool DataInputStream::readBoolean() throw (IOException)
+{
+ register int b = _pin->read();
+
+ if (b < 0)
+ throw EOFException();
+
+ return (b != 0);
+}
+
+javabyte DataInputStream::readByte() throw (IOException)
+{
+ register int b = _pin->read();
+
+ if (b < 0)
+ throw EOFException();
+
+ return static_cast<javabyte>(b);
+}
+
+int DataInputStream::readUnsignedByte() throw (IOException)
+{
+ register int b = _pin->read();
+
+ if (b < 0)
+ throw EOFException();
+
+ return b;
+}
+
+javashort DataInputStream::readShort() throw (IOException)
+{
+ register javashort tmp = 0;
+ register int rc;
+
+ for (register unsigned i = 0; i < 2; i++)
+ {
+ if ((rc = _pin->read()) < 0)
+ throw EOFException();
+
+ tmp = (tmp << 8) + rc;
+ }
+
+ return tmp;
+}
+
+int DataInputStream::readUnsignedShort() throw (IOException)
+{
+ register int tmp = 0, rc;
+
+ for (register unsigned i = 0; i < 2; i++)
+ {
+ if ((rc = _pin->read()) < 0)
+ throw EOFException();
+
+ tmp = (tmp << 8) + rc;
+ }
+
+ return tmp;
+}
+
+javachar DataInputStream::readChar() throw (IOException)
+{
+ register javachar tmp = 0;
+ register int rc;
+
+ for (register unsigned i = 0; i < 2; i++)
+ {
+ if ((rc = _pin->read()) < 0)
+ throw EOFException();
+
+ tmp = (tmp << 8) + rc;
+ }
+
+ return tmp;
+}
+
+javaint DataInputStream::readInt() throw (IOException)
+{
+ register javaint tmp = 0;
+ register int rc;
+
+ for (register unsigned i = 0; i < 4; i++)
+ {
+ if ((rc = _pin->read()) < 0)
+ throw EOFException();
+
+ tmp = (tmp << 8) + rc;
+ }
+
+ return tmp;
+}
+
+javalong DataInputStream::readLong() throw (IOException)
+{
+ register javalong tmp = 0;
+ register int rc;
+
+ for (register unsigned i = 0; i < 8; i++)
+ {
+ if ((rc = _pin->read()) < 0)
+ throw EOFException();
+
+ tmp = (tmp << 8) + rc;
+ }
+
+ return tmp;
+}
+
+void DataInputStream::readUTF(String& str) throw (IOException)
+{
+ UErrorCode status = U_ZERO_ERROR;
+
+ if (!_utf)
+ {
+ // UTF-8 converter lazy initialization
+ _utf = ucnv_open("UTF-8", &status);
+ if (U_FAILURE(status))
+ throw IOException("unable to open ICU UTF-8 converter");
+ }
+
+ int utflen = readUnsignedShort();
+
+ if (utflen > 0)
+ {
+ byte* data = new byte[utflen];
+
+ readFully(data, 0, utflen);
+
+ status = U_ZERO_ERROR;
+ size_t ulen = ucnv_toUChars(_utf, 0, 0, (const char*) data, (size_t) utflen, &status);
+ if (status != U_BUFFER_OVERFLOW_ERROR)
+ {
+ delete[] data;
+ throw "error in ucnv_toUChars";
+ }
+
+ UChar* buffer = str.getBuffer(ulen+1);
+
+ if (buffer)
+ {
+ status = U_ZERO_ERROR;
+ ucnv_toUChars(_utf, buffer, ulen+1, (const char*) data, (size_t) utflen, &status);
+
+ delete[] data;
+
+ if (status != U_ZERO_ERROR)
+ throw "error in ucnv_toUChars";
+
+ str.releaseBuffer(ulen);
+ }
+ else
+ {
+ delete[] data;
+ throw "error in String::getBuffer(size_t)";
+ }
+ }
+}
+
+String* DataInputStream::readUTF() throw (IOException)
+{
+ String* str = new String();
+
+ try
+ {
+ readUTF(*str);
+ }
+ catch (IOException ex)
+ {
+ /* cleanup str */
+ delete str;
+ /* re-throw exception */
+ throw ex;
+ }
+ return str;
+}
+
+String* DataInputStream::readLine() throw (IOException)
+{
+ String* result = new String();
+
+ readLine(*result);
+
+ return result;
+}
+
+void DataInputStream::readLine(String& line) throw (IOException)
+{
+ UErrorCode status = U_ZERO_ERROR;
+
+ if (!_loc)
+ {
+ // default locale converter lazy initialization
+ _loc = ucnv_open(0, &status);
+ if (U_FAILURE(status))
+ throw IOException("unable to open ICU default locale converter");
+ }
+
+ UChar target_buffer[1];
+ UChar* target = target_buffer;
+ const UChar* target_limit = target_buffer+1;
+ char source_buffer[MAX_BYTES_PER_CHARACTER];
+ const char* source = source_buffer;
+ char* source_limit = source_buffer;
+
+ bool cr = false;
+
+ int ch;
+
+ // clear the line
+ line.remove();
+
+ do
+ {
+ ch = _pin->read();
+
+ if (ch >= 0)
+ {
+ if ((source_limit-source_buffer) == MAX_BYTES_PER_CHARACTER)
+ throw IOException("fubar in readLine");
+
+ *(source_limit++) = (byte) ch;
+ }
+
+ status = U_ZERO_ERROR;
+ // use the default locale converter; flush if ch == -1
+ ucnv_toUnicode(_loc, &target, target_limit, &source, source_limit, NULL, (UBool) (ch == -1), &status);
+
+ if (U_FAILURE(status))
+ throw IOException("error in ucnv_toUnicode");
+
+ if (target == target_limit)
+ {
+ // we got a whole character from the converter
+ if (cr)
+ {
+ // last character read was ASCII <CR>; is this one a <LF>?
+ if (target_buffer[0] != 0x0A)
+ {
+ // unread the right number of bytes
+ PushbackInputStream* p = dynamic_cast<PushbackInputStream*>(_pin);
+ if (p)
+ p->unread((const byte*) source_buffer, 0, source-source_buffer);
+ else
+ throw IOException("fubar in dynamic_cast");
+ }
+ // we're now officially at the end of the line
+ break;
+ }
+
+ // did we get an ASCII <LF>?
+ if (target_buffer[0] == 0x0A)
+ break;
+
+ // did we get an ASCII <CR>?
+ if (target_buffer[0] == 0x0D)
+ {
+ cr = true;
+
+ // the next character may be a <LF> but if not we'll have to 'unread' it
+ if (!_del)
+ {
+ // lazy push
+ _pin = new PushbackInputStream(in, MAX_BYTES_PER_CHARACTER);
+ _del = true;
+ }
+ }
+ else
+ {
+ // append character to string and reset pointers
+ source = source_limit = source_buffer;
+ line.append(*(target = target_buffer));
+ }
+ }
+ } while (ch >= 0);
+}
+
+void DataInputStream::readFully(byte* data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ size_t total = 0;
+
+ while (total < length)
+ {
+ int rc = _pin->read(data, offset+total, length-total);
+ if (rc < 0)
+ throw EOFException();
+ total += rc;
+ }
+}
+
+void DataInputStream::readFully(bytearray& b) throw (IOException)
+{
+ readFully(b.data(), 0, b.size());
+}
+
+off_t DataInputStream::skipBytes(off_t n) throw (IOException)
+{
+ off_t total = 0, rc;
+
+ while ((total < n) && ((rc = _pin->skip(n - total)) > 0))
+ total += rc;
+
+ return total;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DataInputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_DATAINPUTSTREAM_H
+#define _CLASS_DATAINPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/DataInput.h"
+using beecrypt::io::DataInput;
+#include "beecrypt/c++/io/FilterInputStream.h"
+using beecrypt::io::FilterInputStream;
+
+#include <unicode/ucnv.h>
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI DataInputStream : public FilterInputStream, public DataInput
+ {
+ private:
+ bool _del;
+ InputStream* _pin;
+ UConverter* _utf;
+ UConverter* _loc;
+
+ public:
+ DataInputStream(InputStream& in);
+ virtual ~DataInputStream();
+
+ virtual bool readBoolean() throw (IOException);
+ virtual javabyte readByte() throw (IOException);
+ virtual javachar readChar() throw (IOException);
+ virtual void readFully(byte* data, size_t offset, size_t length) throw (IOException);
+ virtual void readFully(bytearray& b) throw (IOException);
+ virtual javaint readInt() throw (IOException);
+ virtual String* readLine() throw (IOException);
+ virtual void readLine(String&) throw (IOException);
+ virtual javalong readLong() throw (IOException);
+ virtual javashort readShort() throw (IOException);
+ virtual int readUnsignedByte() throw (IOException);
+ virtual int readUnsignedShort() throw (IOException);
+ virtual String* readUTF() throw (IOException);
+ virtual void readUTF(String&) throw (IOException);
+ virtual off_t skipBytes(off_t n) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DataOutput.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _INTERFACE_DATAOUTPUT_H
+#define _INTERFACE_DATAOUTPUT_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/io/IOException.h"
+using beecrypt::io::IOException;
+
+namespace beecrypt {
+ namespace io {
+ class DataOutput
+ {
+ public:
+ virtual void write(const bytearray&) throw (IOException) = 0;
+ virtual void write(const byte*, size_t, size_t) throw (IOException) = 0;
+ virtual void write(byte) throw (IOException) = 0;
+ virtual void writeBoolean(bool) throw (IOException) = 0;
+ virtual void writeByte(byte) throw (IOException) = 0;
+ virtual void writeChars(const String&) throw (IOException) = 0;
+ virtual void writeInt(javaint) throw (IOException) = 0;
+ virtual void writeLong(javalong) throw (IOException) = 0;
+ virtual void writeShort(javashort) throw (IOException) = 0;
+ virtual void writeUTF(const String&) throw (IOException) = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/DataOutputStream.h"
+
+using namespace beecrypt::io;
+
+DataOutputStream::DataOutputStream(OutputStream& out) : FilterOutputStream(out)
+{
+ _lock.init();
+ _utf = 0;
+ written = 0;
+}
+
+DataOutputStream::~DataOutputStream()
+{
+ _lock.destroy();
+ if (_utf)
+ ucnv_close(_utf);
+}
+
+size_t DataOutputStream::size() const throw ()
+{
+ return written;
+}
+
+void DataOutputStream::write(byte b) throw (IOException)
+{
+ _lock.lock();
+ out.write(b);
+ written++;
+ _lock.unlock();
+}
+
+void DataOutputStream::write(const byte* data, size_t offset, size_t len) throw (IOException)
+{
+ _lock.lock();
+ out.write(data, offset, len);
+ written += len;
+ _lock.unlock();
+}
+
+void DataOutputStream::write(const bytearray& b) throw (IOException)
+{
+ write(b.data(), 0, b.size());
+}
+
+void DataOutputStream::writeBoolean(bool b) throw (IOException)
+{
+ _lock.lock();
+ out.write(b ? 1 : 0);
+ written++;
+ _lock.unlock();
+}
+
+void DataOutputStream::writeByte(byte b) throw (IOException)
+{
+ _lock.lock();
+ out.write(b);
+ written++;
+ _lock.unlock();
+}
+
+void DataOutputStream::writeShort(javashort s) throw (IOException)
+{
+ _lock.lock();
+ out.write((s >> 8) );
+ out.write((s ) & 0xff);
+ written += 2;
+ _lock.unlock();
+}
+
+void DataOutputStream::writeInt(javaint i) throw (IOException)
+{
+ _lock.lock();
+ out.write((i >> 24) );
+ out.write((i >> 16) & 0xff);
+ out.write((i >> 8) & 0xff);
+ out.write((i ) & 0xff);
+ written += 4;
+ _lock.unlock();
+}
+
+void DataOutputStream::writeLong(javalong l) throw (IOException)
+{
+ _lock.lock();
+ out.write((l >> 56) );
+ out.write((l >> 48) & 0xff);
+ out.write((l >> 40) & 0xff);
+ out.write((l >> 32) & 0xff);
+ out.write((l >> 24) & 0xff);
+ out.write((l >> 16) & 0xff);
+ out.write((l >> 8) & 0xff);
+ out.write((l ) & 0xff);
+ written += 8;
+ _lock.unlock();
+}
+
+void DataOutputStream::writeChars(const String& str) throw (IOException)
+{
+ const UChar* buffer = str.getBuffer();
+ size_t len = str.length();
+
+ _lock.lock();
+ for (size_t i = 0; i < len; i++)
+ {
+ out.write((buffer[i] >> 8) & 0xff);
+ out.write((buffer[i] ) & 0xff);
+ }
+ written += (len << 1);
+ _lock.unlock();
+}
+
+void DataOutputStream::writeUTF(const String& str) throw (IOException)
+{
+ UErrorCode status = U_ZERO_ERROR;
+
+ if (!_utf)
+ {
+ // UTF-8 converter lazy initialization
+ _utf = ucnv_open("UTF-8", &status);
+ if (U_FAILURE(status))
+ throw IOException("unable to open ICU UTF-8 converter");
+ }
+
+ // the expected status code here is U_BUFFER_OVERFLOW_ERROR
+ size_t need = ucnv_fromUChars(_utf, 0, 0, str.getBuffer(), str.length(), &status);
+ if (U_FAILURE(status))
+ if (status != U_BUFFER_OVERFLOW_ERROR)
+ throw IOException("unexpected error in ucnv_fromUChars");
+
+ if (need > 0xffff)
+ throw IOException("String length >= 64K");
+
+ byte* buffer = new byte[need];
+
+ status = U_ZERO_ERROR;
+
+ // the expected status code here is U_STRING_NOT_TERMINATED_WARNING
+ ucnv_fromUChars(_utf, (char*) buffer, need, str.getBuffer(), str.length(), &status);
+ if (status != U_STRING_NOT_TERMINATED_WARNING)
+ {
+ delete[] buffer;
+ throw IOException("error in ucnv_fromUChars");
+ }
+
+ // everything ready for the critical section
+ _lock.lock();
+ try
+ {
+ out.write((need >> 8) & 0xff);
+ out.write((need ) & 0xff);
+ out.write(buffer, 0, need);
+ written += 2 + need;
+ _lock.unlock();
+
+ delete[] buffer;
+ }
+ catch (IOException)
+ {
+ _lock.unlock();
+ delete[] buffer;
+ throw;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DataOutputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_DATAOUTPUTSTREAM_H
+#define _CLASS_DATAOUTPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/mutex.h"
+using beecrypt::mutex;
+#include "beecrypt/c++/io/DataOutput.h"
+using beecrypt::io::DataOutput;
+#include "beecrypt/c++/io/FilterOutputStream.h"
+using beecrypt::io::FilterOutputStream;
+
+#include <unicode/ucnv.h>
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI DataOutputStream : public FilterOutputStream, public DataOutput
+ {
+ private:
+ mutex _lock;
+ UConverter* _utf;
+
+ protected:
+ size_t written;
+
+ public:
+ DataOutputStream(OutputStream& out);
+ virtual ~DataOutputStream();
+
+ size_t size() const throw ();
+
+ virtual void write(byte) throw (IOException);
+ virtual void write(const byte* data, size_t offset, size_t length) throw (IOException);
+ virtual void write(const bytearray&) throw (IOException);
+ virtual void writeBoolean(bool) throw (IOException);
+ virtual void writeByte(byte) throw (IOException);
+ virtual void writeChars(const String&) throw (IOException);
+ virtual void writeInt(javaint) throw (IOException);
+ virtual void writeLong(javalong) throw (IOException);
+ virtual void writeShort(javashort) throw (IOException);
+ virtual void writeUTF(const String&) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/EOFException.h"
+
+using namespace beecrypt::io;
+
+EOFException::EOFException() throw ()
+{
+}
+
+EOFException::EOFException(const String& message) throw () : IOException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file EOFException.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_EOFEXCEPTION_H
+#define _CLASS_EOFEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/IOException.h"
+using beecrypt::io::IOException;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI EOFException : public IOException
+ {
+ public:
+ EOFException() throw ();
+ EOFException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if HAVE_ERRNO_H
+# include <errno.h>
+#endif
+
+#include "beecrypt/c++/io/FileInputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::io;
+
+FileInputStream::FileInputStream(FILE* f)
+{
+ _f = f;
+ _mark = -1;
+}
+
+FileInputStream::~FileInputStream()
+{
+}
+
+off_t FileInputStream::available() throw (IOException)
+{
+ if (!_f)
+ throw IOException("not a valid file handle");
+
+ long _curr, _size;
+
+ if ((_curr = ftell(_f)) == -1)
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("ftell failed");
+ #endif
+
+ if (fseek(_f, 0, SEEK_END))
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("fseek failed");
+ #endif
+
+ if ((_size = ftell(_f)) == -1)
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("ftell failed");
+ #endif
+
+ if (fseek(_f, _curr, SEEK_SET))
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("fseek failed");
+ #endif
+
+ return (off_t) (_size - _curr);
+}
+
+void FileInputStream::close() throw (IOException)
+{
+ if (_f)
+ {
+ if (fclose(_f))
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("fclose failed");
+ #endif
+
+ _f = 0;
+ }
+}
+
+void FileInputStream::mark(off_t readlimit) throw ()
+{
+ if (_f)
+ _mark = ftell(_f);
+}
+
+bool FileInputStream::markSupported() throw ()
+{
+ return true;
+}
+
+int FileInputStream::read() throw (IOException)
+{
+ if (!_f)
+ throw IOException("not a valid file handle");
+
+ return fgetc(_f);
+}
+
+int FileInputStream::read(byte* data, size_t offset, size_t length) throw (IOException)
+{
+ if (!_f)
+ throw IOException("not a valid file handle");
+
+ if (!data)
+ throw NullPointerException();
+
+ size_t rc = fread(data+offset, 1, length, _f);
+
+ if (rc == 0)
+ return -1;
+
+ return rc;
+}
+
+int FileInputStream::read(bytearray& b) throw (IOException)
+{
+ return read(b.data(), 0, b.size());
+}
+
+void FileInputStream::reset() throw (IOException)
+{
+ if (!_f)
+ throw IOException("not a valid file handle");
+
+ if (_mark < 0)
+ throw IOException("not a valid mark");
+
+ if (fseek(_f, _mark, SEEK_SET))
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("fseek failed");
+ #endif
+}
+
+off_t FileInputStream::skip(off_t n) throw (IOException)
+{
+ if (!_f)
+ throw IOException("not a valid file handle");
+
+ off_t _avail = available();
+
+ if (n > _avail)
+ n = _avail;
+
+ if (fseek(_f, (long) n, SEEK_CUR))
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("fseek failed");
+ #endif
+
+ return n;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file FileInputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_FILEINPUTSTREAM_H
+#define _CLASS_FILEINPUTSTREAM_H
+
+#include <stdio.h>
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/InputStream.h"
+using beecrypt::io::InputStream;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI FileInputStream : public InputStream
+ {
+ private:
+ FILE* _f;
+ long _mark;
+
+ public:
+ FileInputStream(FILE* f);
+ virtual ~FileInputStream();
+
+ virtual off_t available() throw (IOException);
+ virtual void close() throw (IOException);
+ virtual void mark(off_t readlimit) throw ();
+ virtual bool markSupported() throw ();
+ virtual int read() throw (IOException);
+ virtual int read(byte* data, size_t offset, size_t length) throw (IOException);
+ virtual int read(bytearray&) throw (IOException);
+ virtual void reset() throw (IOException);
+ virtual off_t skip(off_t n) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if HAVE_ERRNO_H
+# include <errno.h>
+#endif
+
+#include "beecrypt/c++/io/FileOutputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::io;
+
+FileOutputStream::FileOutputStream(FILE *f)
+{
+ _f = f;
+}
+
+FileOutputStream::~FileOutputStream()
+{
+}
+
+void FileOutputStream::close() throw (IOException)
+{
+ if (_f)
+ {
+ if (fclose(_f))
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("fclose failed");
+ #endif
+
+ _f = 0;
+ }
+}
+
+void FileOutputStream::flush() throw (IOException)
+{
+ if (!_f)
+ throw IOException("no valid file handle to flush");
+
+ if (fflush(_f))
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("fflush failed");
+ #endif
+}
+
+void FileOutputStream::write(byte b) throw (IOException)
+{
+ if (!_f)
+ throw IOException("no valid file handle to write");
+
+ size_t rc = fwrite(&b, 1, 1, _f);
+
+ if (rc < 1)
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("incomplete fwrite");
+ #endif
+}
+
+void FileOutputStream::write(const byte* data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ if (!_f)
+ throw IOException("no valid file handle to write");
+
+ size_t rc = fwrite(data+offset, 1, length, _f);
+
+ if (rc < length)
+ #if HAVE_ERRNO_H
+ throw IOException(strerror(errno));
+ #else
+ throw IOException("incomplete fwrite");
+ #endif
+}
+
+void FileOutputStream::write(const bytearray& b) throw (IOException)
+{
+ write(b.data(), 0, b.size());
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file FileOutputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_FILEOUTPUTSTREAM_H
+#define _CLASS_FILEOUTPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/OutputStream.h"
+using beecrypt::io::OutputStream;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI FileOutputStream : public OutputStream
+ {
+ private:
+ FILE* _f;
+
+ public:
+ FileOutputStream(FILE* f);
+ virtual ~FileOutputStream();
+
+ virtual void close() throw (IOException);
+ virtual void flush() throw (IOException);
+ virtual void write(byte b) throw (IOException);
+ virtual void write(const byte* data, size_t offset, size_t length) throw (IOException);
+ virtual void write(const bytearray&) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/FilterInputStream.h"
+
+using namespace beecrypt::io;
+
+FilterInputStream::FilterInputStream(InputStream& in) : in(in)
+{
+ _lock.init();
+}
+
+FilterInputStream::~FilterInputStream()
+{
+ _lock.destroy();
+}
+
+off_t FilterInputStream::available() throw (IOException)
+{
+ return in.available();
+}
+
+void FilterInputStream::close() throw (IOException)
+{
+ in.close();
+}
+
+void FilterInputStream::mark(off_t readlimit) throw ()
+{
+ _lock.lock();
+ in.mark(readlimit);
+ _lock.unlock();
+}
+
+bool FilterInputStream::markSupported() throw ()
+{
+ return in.markSupported();
+}
+
+int FilterInputStream::read() throw (IOException)
+{
+ return in.read();
+}
+
+int FilterInputStream::read(byte* data, size_t offset, size_t len) throw (IOException)
+{
+ return in.read(data, offset, len);
+}
+
+int FilterInputStream::read(bytearray& b) throw (IOException)
+{
+ return in.read(b);
+}
+
+void FilterInputStream::reset() throw (IOException)
+{
+ _lock.lock();
+ in.reset();
+ _lock.unlock();
+}
+
+off_t FilterInputStream::skip(off_t n) throw (IOException)
+{
+ return in.skip(n);
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file FilterInputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_FILTERINPUTSTREAM_H
+#define _CLASS_FILTERINPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/mutex.h"
+using beecrypt::mutex;
+#include "beecrypt/c++/io/InputStream.h"
+using beecrypt::io::InputStream;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI FilterInputStream : public InputStream
+ {
+ private:
+ mutex _lock;
+
+ protected:
+ InputStream& in;
+
+ public:
+ FilterInputStream(InputStream& in);
+ virtual ~FilterInputStream();
+
+ virtual off_t available() throw (IOException);
+ virtual void close() throw (IOException);
+ virtual void mark(off_t) throw ();
+ virtual bool markSupported() throw ();
+ virtual int read() throw (IOException);
+ virtual int read(byte* data, size_t offset, size_t length) throw (IOException);
+ virtual int read(bytearray& b) throw (IOException);
+ virtual void reset() throw (IOException);
+ virtual off_t skip(off_t) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/FilterOutputStream.h"
+
+using namespace beecrypt::io;
+
+FilterOutputStream::FilterOutputStream(OutputStream& out) : out(out)
+{
+}
+
+FilterOutputStream::~FilterOutputStream()
+{
+}
+
+void FilterOutputStream::close() throw (IOException)
+{
+ try
+ {
+ flush();
+ }
+ catch (IOException)
+ {
+ // ignore
+ }
+ out.close();
+}
+
+void FilterOutputStream::flush() throw (IOException)
+{
+ out.flush();
+}
+
+void FilterOutputStream::write(byte b) throw (IOException)
+{
+ out.write(b);
+}
+
+void FilterOutputStream::write(const byte* data, size_t offset, size_t len) throw (IOException)
+{
+ out.write(data, offset, len);
+}
+
+void FilterOutputStream::write(const bytearray& b) throw (IOException)
+{
+ out.write(b.data(), 0, b.size());
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file FilterOutputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_FILTEROUTPUTSTREAM_H
+#define _CLASS_FILTEROUTPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/OutputStream.h"
+using beecrypt::io::OutputStream;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI FilterOutputStream : public OutputStream
+ {
+ protected:
+ OutputStream& out;
+
+ public:
+ FilterOutputStream(OutputStream& out);
+ virtual ~FilterOutputStream();
+
+ virtual void close() throw (IOException);
+ virtual void flush() throw (IOException);
+ virtual void write(byte b) throw (IOException);
+ virtual void write(const byte* data, size_t offset, size_t length) throw (IOException);
+ virtual void write(const bytearray&) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/IOException.h"
+
+using namespace beecrypt::io;
+
+IOException::IOException()
+{
+}
+
+IOException::IOException(const String& message) : Exception(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file IOException.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_IOEXCEPTION_H
+#define _CLASS_IOEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/Exception.h"
+using beecrypt::lang::Exception;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI IOException : public Exception
+ {
+ public:
+ IOException();
+ IOException(const String&);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/InputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::io;
+
+off_t InputStream::available() throw (IOException)
+{
+ return 0;
+}
+
+void InputStream::close() throw (IOException)
+{
+}
+
+void InputStream::mark(off_t readlimit) throw ()
+{
+}
+
+bool InputStream::markSupported() throw ()
+{
+ return false;
+}
+
+int InputStream::read(bytearray& b) throw (IOException)
+{
+ return read(b.data(), 0, b.size());
+}
+
+int InputStream::read(byte* data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ int b = read();
+ if (b < 0)
+ return -1;
+
+ data[offset] = (byte) b;
+
+ size_t i = 1;
+ try
+ {
+ while (i < length)
+ {
+ b = read();
+ if (b < 0)
+ break;
+ data[offset+i++] = (byte) b;
+ }
+ }
+ catch (IOException)
+ {
+ // ignore
+ }
+ return i;
+}
+
+off_t InputStream::skip(off_t n) throw (IOException)
+{
+ off_t remaining = n;
+
+ byte skip[2048];
+
+ while (remaining > 0)
+ {
+ int rc = read(skip, 0, remaining > 2048 ? 2048 : remaining);
+ if (rc < 0)
+ break;
+ remaining -= rc;
+ }
+
+ return n - remaining;
+}
+
+void InputStream::reset() throw (IOException)
+{
+ throw IOException("reset not supported");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file InputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_INPUTSTREAM_H
+#define _CLASS_INPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/io/IOException.h"
+using beecrypt::io::IOException;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI InputStream
+ {
+ public:
+ virtual ~InputStream() {};
+
+ virtual off_t available() throw (IOException);
+ virtual void close() throw (IOException);
+ virtual void mark(off_t readlimit) throw ();
+ virtual bool markSupported() throw ();
+ virtual int read() throw (IOException) = 0;
+ virtual int read(byte* data, size_t offset, size_t length) throw (IOException);
+ virtual int read(bytearray& b) throw (IOException);
+ virtual void reset() throw (IOException);
+ virtual off_t skip(off_t n) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+noinst_LTLIBRARIES = libcxxio.la
+cxxiodir= $(pkgincludedir)/c++/io
+
+libcxxio_la_SOURCES =\
+ByteArrayInputStream.cxx \
+ByteArrayOutputStream.cxx \
+DataInputStream.cxx \
+DataOutputStream.cxx \
+EOFException.cxx \
+FileInputStream.cxx \
+FileOutputStream.cxx \
+FilterInputStream.cxx \
+FilterOutputStream.cxx \
+InputStream.cxx \
+IOException.cxx \
+OutputStream.cxx \
+PrintStream.cxx \
+PushbackInputStream.cxx
+libcxxio_la_LIBADD = -licuuc
+
+cxxio_HEADERS =\
+ByteArrayInputStream.h \
+ByteArrayOutputStream.h \
+DataInput.h \
+DataOutput.h \
+DataInputStream.h \
+DataOutputStream.h \
+EOFException.h \
+FileInputStream.h \
+FileOutputStream.h \
+FilterInputStream.h \
+FilterOutputStream.h \
+InputStream.h \
+IOException.h \
+OutputStream.h \
+PrintStream.h \
+PushbackInputStream.h
+
+TESTS = test
+
+check_PROGRAMS = test
+
+test_SOURCES = test.cxx
+test_LDADD = libcxxio.la ../lang/libcxxlang.la $(top_builddir)/libbeecrypt.la -licuuc -licuio
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxio_la_SOURCES) $(test_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+check_PROGRAMS = test$(EXEEXT)
+subdir = c++/io
+DIST_COMMON = $(cxxio_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxio_la_DEPENDENCIES =
+am_libcxxio_la_OBJECTS = ByteArrayInputStream.lo \
+ ByteArrayOutputStream.lo DataInputStream.lo \
+ DataOutputStream.lo EOFException.lo FileInputStream.lo \
+ FileOutputStream.lo FilterInputStream.lo FilterOutputStream.lo \
+ InputStream.lo IOException.lo OutputStream.lo PrintStream.lo \
+ PushbackInputStream.lo
+libcxxio_la_OBJECTS = $(am_libcxxio_la_OBJECTS)
+am_test_OBJECTS = test.$(OBJEXT)
+test_OBJECTS = $(am_test_OBJECTS)
+test_DEPENDENCIES = libcxxio.la ../lang/libcxxlang.la \
+ $(top_builddir)/libbeecrypt.la
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxio_la_SOURCES) $(test_SOURCES)
+DIST_SOURCES = $(libcxxio_la_SOURCES) $(test_SOURCES)
+am__installdirs = "$(DESTDIR)$(cxxiodir)"
+cxxioHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxio_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+noinst_LTLIBRARIES = libcxxio.la
+cxxiodir = $(pkgincludedir)/c++/io
+libcxxio_la_SOURCES = \
+ByteArrayInputStream.cxx \
+ByteArrayOutputStream.cxx \
+DataInputStream.cxx \
+DataOutputStream.cxx \
+EOFException.cxx \
+FileInputStream.cxx \
+FileOutputStream.cxx \
+FilterInputStream.cxx \
+FilterOutputStream.cxx \
+InputStream.cxx \
+IOException.cxx \
+OutputStream.cxx \
+PrintStream.cxx \
+PushbackInputStream.cxx
+
+libcxxio_la_LIBADD = -licuuc
+cxxio_HEADERS = \
+ByteArrayInputStream.h \
+ByteArrayOutputStream.h \
+DataInput.h \
+DataOutput.h \
+DataInputStream.h \
+DataOutputStream.h \
+EOFException.h \
+FileInputStream.h \
+FileOutputStream.h \
+FilterInputStream.h \
+FilterOutputStream.h \
+InputStream.h \
+IOException.h \
+OutputStream.h \
+PrintStream.h \
+PushbackInputStream.h
+
+TESTS = test
+test_SOURCES = test.cxx
+test_LDADD = libcxxio.la ../lang/libcxxlang.la $(top_builddir)/libbeecrypt.la -licuuc -licuio
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/io/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/io/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxio.la: $(libcxxio_la_OBJECTS) $(libcxxio_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxio_la_LDFLAGS) $(libcxxio_la_OBJECTS) $(libcxxio_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES)
+ @rm -f test$(EXEEXT)
+ $(CXXLINK) $(test_LDFLAGS) $(test_OBJECTS) $(test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxioHEADERS: $(cxxio_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxiodir)" || $(mkdir_p) "$(DESTDIR)$(cxxiodir)"
+ @list='$(cxxio_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxioHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxiodir)/$$f'"; \
+ $(cxxioHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxiodir)/$$f"; \
+ done
+
+uninstall-cxxioHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxio_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxiodir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxiodir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list='$(TESTS)'; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -n "$$skipped" && echo "$$skipped"; \
+ test -n "$$report" && echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(cxxiodir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cxxioHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cxxioHEADERS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES ctags distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-cxxioHEADERS install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-cxxioHEADERS uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/OutputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::io;
+
+void OutputStream::close() throw (IOException)
+{
+}
+
+void OutputStream::flush() throw (IOException)
+{
+}
+
+void OutputStream::write(const byte* data, size_t offset, size_t len) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ for (size_t i = 0; i < len; i++)
+ write(data[offset+i]);
+}
+
+void OutputStream::write(const bytearray& b) throw (IOException)
+{
+ write(b.data(), 0, b.size());
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file OutputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_OUTPUTSTREAM_H
+#define _CLASS_OUTPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/io/IOException.h"
+using beecrypt::io::IOException;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI OutputStream
+ {
+ public:
+ virtual ~OutputStream() {};
+
+ virtual void close() throw (IOException);
+ virtual void flush() throw (IOException);
+ virtual void write(byte b) throw (IOException) = 0;
+ virtual void write(const byte* data, size_t offset, size_t length) throw (IOException);
+ virtual void write(const bytearray& b) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/PrintStream.h"
+#include "beecrypt/c++/lang/IllegalArgumentException.h"
+using beecrypt::lang::IllegalArgumentException;
+
+#define MAX_BYTES_PER_CHARACTER 8
+
+using namespace beecrypt::io;
+
+PrintStream::PrintStream(OutputStream& out, bool autoflush, const char* encoding) : FilterOutputStream(out)
+{
+ UErrorCode status = U_ZERO_ERROR;
+
+ _loc = ucnv_open(encoding, &status);
+ if (U_FAILURE(status))
+ throw IllegalArgumentException("invalid encoding");
+
+ _closed = false;
+ _error = false;
+ _flush = autoflush;
+}
+
+PrintStream::~PrintStream()
+{
+ ucnv_close(_loc);
+}
+
+void PrintStream::close() throw ()
+{
+ try
+ {
+ out.close();
+ _closed = true;
+ }
+ catch (IOException)
+ {
+ _error = true;
+ }
+}
+
+void PrintStream::flush() throw ()
+{
+ if (!_closed)
+ {
+ try
+ {
+ out.flush();
+ }
+ catch (IOException)
+ {
+ _error = true;
+ }
+ }
+}
+
+void PrintStream::write(byte b) throw ()
+{
+ if (!_closed)
+ {
+ try
+ {
+ out.write(b);
+ }
+ catch (IOException)
+ {
+ _error = true;
+ }
+ }
+}
+
+void PrintStream::write(const byte* data, size_t offset, size_t length) throw ()
+{
+ if (!_closed)
+ {
+ try
+ {
+ out.write(data, offset, length);
+ }
+ catch (IOException)
+ {
+ _error = true;
+ }
+ }
+}
+
+void PrintStream::print(const UChar* str, size_t length) throw ()
+{
+ if (!_closed)
+ {
+ try
+ {
+ UErrorCode status = U_ZERO_ERROR;
+
+ // pre-flighting
+ size_t need = ucnv_fromUChars(_loc, 0, 0, str, length, &status);
+ if (U_FAILURE(status))
+ if (status != U_BUFFER_OVERFLOW_ERROR)
+ throw IOException();
+
+ byte* buffer = new byte[need];
+
+ status = U_ZERO_ERROR;
+
+ try
+ {
+ ucnv_fromUChars(_loc, (char*) buffer, need, str, length, &status);
+ if (status != U_STRING_NOT_TERMINATED_WARNING)
+ throw IOException();
+
+ out.write(buffer, 0, need);
+
+ if (_flush)
+ {
+ for (size_t i = 0; i < length; i++)
+ if (str[i] == 0xA)
+ out.flush();
+ }
+
+ delete[] buffer;
+ }
+ catch (IOException)
+ {
+ delete[] buffer;
+ throw;
+ }
+ }
+ catch (IOException)
+ {
+ _error = true;
+ }
+ }
+}
+
+void PrintStream::print(bool b) throw ()
+{
+ static const String* STR_TRUE = 0;
+ static const String* STR_FALSE = 0;
+
+ if (!_closed)
+ {
+ if (b)
+ {
+ if (!STR_FALSE)
+ STR_FALSE = new String("true");
+
+ print(*STR_TRUE);
+ }
+ else
+ {
+ if (!STR_FALSE)
+ STR_FALSE = new String("false");
+
+ print(*STR_FALSE);
+ }
+ }
+}
+
+void PrintStream::print(javachar ch) throw ()
+{
+ if (!_closed)
+ {
+ char buffer[MAX_BYTES_PER_CHARACTER];
+
+ try
+ {
+ UErrorCode status = U_ZERO_ERROR;
+
+ // do conversion of one character
+ size_t used = ucnv_fromUChars(_loc, buffer, 8, &ch, 1, &status);
+ if (U_FAILURE(status))
+ throw IOException("failure in ucnv_fromUChars");
+
+ out.write((const byte*) buffer, 0, used);
+
+ // check if we need to flush
+ if (_flush && ch == 0xA)
+ out.flush();
+ }
+ catch (IOException)
+ {
+ _error = true;
+ }
+ }
+}
+
+void PrintStream::print(const array<javachar>& chars) throw ()
+{
+ print(chars.data(), chars.size());
+}
+
+void PrintStream::print(const String& str) throw ()
+{
+ print(str.getBuffer(), str.length());
+}
+
+void PrintStream::println() throw ()
+{
+ if (!_closed)
+ {
+ #if WIN32
+ print((javachar) 0xD);
+ print((javachar) 0xA);
+ #else
+ print((javachar) 0xA);
+ #endif
+ }
+}
+
+void PrintStream::println(bool b) throw ()
+{
+ if (!_closed)
+ {
+ print(b);
+ println();
+ }
+}
+
+void PrintStream::println(const array<javachar>& chars) throw ()
+{
+ if (!_closed)
+ {
+ print(chars);
+ println();
+ }
+}
+
+void PrintStream::println(const String& str) throw ()
+{
+ if (!_closed)
+ {
+ print(str);
+ println();
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PrintStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_PRINTSTREAM_H
+#define _CLASS_PRINTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::array;
+using beecrypt::bytearray;
+#include "beecrypt/c++/io/FilterOutputStream.h"
+using beecrypt::io::FilterOutputStream;
+
+#include <unicode/ucnv.h>
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI PrintStream : public FilterOutputStream
+ {
+ private:
+ bool _closed;
+ bool _error;
+ bool _flush;
+ UConverter* _loc;
+
+ void print(const UChar*, size_t) throw ();
+
+ protected:
+ void setError() throw ();
+
+ public:
+ PrintStream(OutputStream& out, bool autoflush = false, const char* encoding = 0);
+ virtual ~PrintStream();
+
+ virtual void close() throw ();
+ virtual void flush() throw ();
+ virtual void write(byte) throw ();
+ virtual void write(const byte*, size_t, size_t) throw ();
+
+ bool checkError() throw ();
+ void print(bool) throw ();
+ void print(javachar) throw ();
+ void print(javaint) throw ();
+ void print(javalong) throw ();
+ void print(javashort) throw ();
+ // void print(javafloat) throw ();
+ // void print(javadouble) throw ();
+ // void print(const char*) throw ();
+ void print(const array<javachar>&) throw ();
+ void print(const String&) throw ();
+ void println() throw ();
+ void println(bool) throw ();
+ void println(javachar) throw ();
+ void println(javaint) throw ();
+ void println(javalong) throw ();
+ void println(javashort) throw ();
+ // void println(javafloat) throw ();
+ // void println(javadouble) throw ();
+ // void println(const char*) throw ();
+ void println(const array<javachar>&) throw ();
+ void println(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/PushbackInputStream.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+
+using namespace beecrypt::io;
+
+PushbackInputStream::PushbackInputStream(InputStream& in, size_t size) : FilterInputStream(in), buf(size)
+{
+ _closed = false;
+ pos = 0;
+}
+
+PushbackInputStream::~PushbackInputStream()
+{
+}
+
+off_t PushbackInputStream::available() throw (IOException)
+{
+ if (_closed)
+ throw IOException("Stream closed");
+
+ return in.available() + (buf.size() - pos);
+}
+
+void PushbackInputStream::close() throw (IOException)
+{
+ if (!_closed)
+ {
+ in.close();
+ _closed = true;
+ }
+}
+
+int PushbackInputStream::read() throw (IOException)
+{
+ if (_closed)
+ throw IOException("Stream closed");
+
+ if (pos < buf.size())
+ return buf[pos++];
+
+ return in.read();
+}
+
+bool PushbackInputStream::markSupported() throw ()
+{
+ return false;
+}
+
+int PushbackInputStream::read(byte* data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ if (_closed)
+ throw IOException("Stream closed");
+
+ if (length == 0)
+ return 0;
+
+ size_t buffered = buf.size() - pos;
+
+ if (buffered > 0)
+ {
+ if (length < buffered)
+ buffered = length;
+
+ memcpy(data+offset, buf.data()+pos, buffered);
+
+ pos += buffered;
+ offset += buffered;
+ length -= buffered;
+ }
+
+ if (length > 0)
+ {
+ int rc = in.read(data, offset, length);
+ if (rc < 0)
+ if (buffered == 0)
+ return -1; // nothing in buffer and nothing read
+ else
+ return buffered; // something in buffer and nothing read
+
+ return buffered + rc; // something in buffer and something read
+ }
+
+ return buffered; // everything was in buffer
+}
+
+off_t PushbackInputStream::skip(off_t n) throw (IOException)
+{
+ if (_closed)
+ throw IOException("Stream closed");
+
+ if (n == 0)
+ return 0;
+
+ size_t canskip = buf.size() - pos;
+
+ if (canskip > 0)
+ {
+ if (n < canskip)
+ {
+ // more in buffer than we need to skip
+ canskip = n;
+ }
+ pos += canskip;
+ n -= canskip;
+ }
+
+ if (n > 0)
+ {
+ // apparently we didn't have enough in the buffer
+ canskip += in.skip(n);
+ }
+
+ return canskip;
+}
+
+void PushbackInputStream::unread(byte b) throw (IOException)
+{
+ if (_closed)
+ throw IOException("Stream closed");
+
+ if (pos == 0)
+ throw IOException("Pushback buffer is full");
+
+ buf[--pos] = b;
+}
+
+void PushbackInputStream::unread(const bytearray& b) throw (IOException)
+{
+ unread(b.data(), 0, b.size());
+}
+
+void PushbackInputStream::unread(const byte* data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ pos -= length;
+
+ memcpy(buf.data()+pos, data+offset, length);
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PushbackInputStream.h
+ * \ingroup CXX_IO_m
+ */
+
+#ifndef _CLASS_PUSHBACKINPUTSTREAM_H
+#define _CLASS_PUSHBACKINPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/FilterInputStream.h"
+using beecrypt::io::FilterInputStream;
+
+namespace beecrypt {
+ namespace io {
+ class BEECRYPTCXXAPI PushbackInputStream : public FilterInputStream
+ {
+ private:
+ bool _closed;
+
+ protected:
+ bytearray buf;
+ size_t pos;
+
+ public:
+ PushbackInputStream(InputStream& in, size_t size = 1);
+ virtual ~PushbackInputStream();
+
+ virtual off_t available() throw (IOException);
+ virtual void close() throw (IOException);
+ virtual bool markSupported() throw ();
+ virtual int read() throw (IOException);
+ virtual int read(byte* data, size_t offset, size_t length) throw (IOException);
+ virtual off_t skip(off_t n) throw (IOException);
+
+ void unread(byte) throw (IOException);
+ void unread(const byte* data, size_t offset, size_t length) throw (IOException);
+ void unread(const bytearray& b) throw (IOException);
+
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "c++/io/ByteArrayInputStream.h"
+using beecrypt::io::ByteArrayInputStream;
+#include "c++/io/ByteArrayOutputStream.h"
+using beecrypt::io::ByteArrayOutputStream;
+#include "c++/io/DataInputStream.h"
+using beecrypt::io::DataInputStream;
+#include "c++/io/DataOutputStream.h"
+using beecrypt::io::DataOutputStream;
+
+#include <iostream>
+#include <unicode/ustream.h>
+using namespace std;
+
+int main(int argc, char* argv[])
+{
+ String input = UNICODE_STRING_SIMPLE("The quick brown fox jumps over the lazy dog");
+
+ int failures = 0;
+
+ try
+ {
+ ByteArrayOutputStream bos;
+ DataOutputStream dos(bos);
+
+ dos.writeUTF(input);
+ dos.close();
+
+ bytearray* b = bos.toByteArray();
+
+ if (b)
+ {
+ if (b->size() != 45)
+ {
+ cerr << "failed test 1" << endl;
+ failures++;
+ }
+
+ ByteArrayInputStream bin(*b);
+ DataInputStream din(bin);
+
+ String test;
+
+ din.readUTF(test);
+
+ if (input != test)
+ {
+ cerr << "failed test 2" << endl;
+ failures++;
+ }
+
+ if (din.available() != 0)
+ {
+ cerr << "failed test 3" << endl;
+ cerr << "remaining bytes in stream: " << din.available() << endl;
+ failures++;
+ }
+
+ din.close();
+ bin.close();
+ }
+ else
+ {
+ cerr << "failed structural 1" << endl;
+ failures++;
+ }
+ }
+ catch (IOException& ex)
+ {
+ cerr << "failed structural 2" << endl;
+ failures++;
+ }
+ catch (...)
+ {
+ cerr << "failed structural 3" << endl;
+ failures++;
+ }
+
+ return failures;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/Error.h"
+using namespace beecrypt::lang;
+
+Error::Error() throw ()
+{
+}
+
+Error::Error(const String& message) throw () : Throwable(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Error.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _CLASS_ERROR_H
+#define _CLASS_ERROR_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/Throwable.h"
+using beecrypt::lang::Throwable;
+
+namespace beecrypt {
+ namespace lang {
+ class BEECRYPTCXXAPI Error : public Throwable
+ {
+ public:
+ Error() throw ();
+ Error(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/Exception.h"
+using namespace beecrypt::lang;
+
+Exception::Exception() throw ()
+{
+}
+
+Exception::Exception(const String& message) throw () : Throwable(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Exception.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _CLASS_EXCEPTION_H
+#define _CLASS_EXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/Throwable.h"
+using beecrypt::lang::Throwable;
+
+namespace beecrypt {
+ namespace lang {
+ class BEECRYPTCXXAPI Exception : public Throwable
+ {
+ public:
+ Exception() throw ();
+ Exception(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/IllegalArgumentException.h"
+using namespace beecrypt::lang;
+
+IllegalArgumentException::IllegalArgumentException() throw ()
+{
+}
+
+IllegalArgumentException::IllegalArgumentException(const String& message) throw () : RuntimeException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file IllegalArgumentException.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _CLASS_ILLEGALARGUMENTEXCEPTION_H
+#define _CLASS_ILLEGALARGUMENTEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/RuntimeException.h"
+using beecrypt::lang::RuntimeException;
+
+namespace beecrypt {
+ namespace lang {
+ class BEECRYPTCXXAPI IllegalArgumentException : public RuntimeException
+ {
+ public:
+ IllegalArgumentException() throw ();
+ IllegalArgumentException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/IllegalStateException.h"
+using namespace beecrypt::lang;
+
+IllegalStateException::IllegalStateException() throw ()
+{
+}
+
+IllegalStateException::IllegalStateException(const String& message) throw () : RuntimeException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file IllegalStateException.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _CLASS_ILLEGALSTATEEXCEPTION_H
+#define _CLASS_ILLEGALSTATEEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/RuntimeException.h"
+using beecrypt::lang::RuntimeException;
+
+namespace beecrypt {
+ namespace lang {
+ class BEECRYPTCXXAPI IllegalStateException : public RuntimeException
+ {
+ public:
+ IllegalStateException() throw ();
+ IllegalStateException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+noinst_LTLIBRARIES = libcxxlang.la
+
+cxxlangdir=$(pkgincludedir)/c++/lang
+
+libcxxlang_la_SOURCES =\
+Error.cxx \
+Exception.cxx \
+IllegalArgumentException.cxx \
+IllegalStateException.cxx \
+NullPointerException.cxx \
+OutOfMemoryError.cxx \
+RuntimeException.cxx \
+Throwable.cxx
+
+cxxlang_HEADERS =\
+Error.h \
+Exception.h \
+IllegalArgumentException.h \
+IllegalStateException.h \
+NullPointerException.h \
+OutOfMemoryError.h \
+RuntimeException.h \
+String.h \
+Throwable.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxlang_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/lang
+DIST_COMMON = $(cxxlang_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxlang_la_LIBADD =
+am_libcxxlang_la_OBJECTS = Error.lo Exception.lo \
+ IllegalArgumentException.lo IllegalStateException.lo \
+ NullPointerException.lo OutOfMemoryError.lo \
+ RuntimeException.lo Throwable.lo
+libcxxlang_la_OBJECTS = $(am_libcxxlang_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxlang_la_SOURCES)
+DIST_SOURCES = $(libcxxlang_la_SOURCES)
+am__installdirs = "$(DESTDIR)$(cxxlangdir)"
+cxxlangHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxlang_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+noinst_LTLIBRARIES = libcxxlang.la
+cxxlangdir = $(pkgincludedir)/c++/lang
+libcxxlang_la_SOURCES = \
+Error.cxx \
+Exception.cxx \
+IllegalArgumentException.cxx \
+IllegalStateException.cxx \
+NullPointerException.cxx \
+OutOfMemoryError.cxx \
+RuntimeException.cxx \
+Throwable.cxx
+
+cxxlang_HEADERS = \
+Error.h \
+Exception.h \
+IllegalArgumentException.h \
+IllegalStateException.h \
+NullPointerException.h \
+OutOfMemoryError.h \
+RuntimeException.h \
+String.h \
+Throwable.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/lang/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/lang/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxlang.la: $(libcxxlang_la_OBJECTS) $(libcxxlang_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxlang_la_LDFLAGS) $(libcxxlang_la_OBJECTS) $(libcxxlang_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxlangHEADERS: $(cxxlang_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxlangdir)" || $(mkdir_p) "$(DESTDIR)$(cxxlangdir)"
+ @list='$(cxxlang_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxlangHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxlangdir)/$$f'"; \
+ $(cxxlangHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxlangdir)/$$f"; \
+ done
+
+uninstall-cxxlangHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxlang_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxlangdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxlangdir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(cxxlangdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cxxlangHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cxxlangHEADERS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-cxxlangHEADERS install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-cxxlangHEADERS \
+ uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/NullPointerException.h"
+using namespace beecrypt::lang;
+
+NullPointerException::NullPointerException() throw ()
+{
+}
+
+NullPointerException::NullPointerException(const String& message) throw () : RuntimeException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file NullPointerException.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _CLASS_NULLPOINTEREXCEPTION_H
+#define _CLASS_NULLPOINTEREXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/RuntimeException.h"
+using beecrypt::lang::RuntimeException;
+
+namespace beecrypt {
+ namespace lang {
+ class BEECRYPTCXXAPI NullPointerException : public RuntimeException
+ {
+ public:
+ NullPointerException() throw ();
+ NullPointerException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/OutOfMemoryError.h"
+using namespace beecrypt::lang;
+
+OutOfMemoryError::OutOfMemoryError() throw ()
+{
+}
+
+OutOfMemoryError::OutOfMemoryError(const String& message) throw () : Error(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file OutOfMemoryError.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _CLASS_OUTOFMEMORYERROR_H
+#define _CLASS_OUTOFMEMORYERROR_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/Error.h"
+using beecrypt::lang::Error;
+
+namespace beecrypt {
+ namespace lang {
+ class BEECRYPTCXXAPI OutOfMemoryError : public Error
+ {
+ public:
+ OutOfMemoryError() throw ();
+ OutOfMemoryError(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/RuntimeException.h"
+using namespace beecrypt::lang;
+
+RuntimeException::RuntimeException() throw ()
+{
+}
+
+RuntimeException::RuntimeException(const String& message) throw () : Exception(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RuntimeException.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _CLASS_RUNTIMEEXCEPTION_H
+#define _CLASS_RUNTIMEEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/Exception.h"
+using beecrypt::lang::Exception;
+
+namespace beecrypt {
+ namespace lang {
+ class BEECRYPTCXXAPI RuntimeException : public Exception
+ {
+ public:
+ RuntimeException() throw ();
+ RuntimeException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file String.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _BEECRYPT_CLASS_STRING_H
+#define _BEECRYPT_CLASS_STRING_H
+
+#ifdef __cplusplus
+
+#include <unicode/unistr.h>
+
+namespace beecrypt {
+ namespace lang {
+ typedef UnicodeString String;
+ }
+}
+
+#endif
+
+#endif
+
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/Throwable.h"
+using namespace beecrypt::lang;
+
+Throwable::Throwable() throw ()
+{
+}
+
+Throwable::Throwable(const String& message) throw ()
+{
+ _msg = message;
+}
+
+Throwable::Throwable(const Throwable& copy) throw ()
+{
+ _msg = copy._msg;
+}
+
+const String& Throwable::getMessage() const throw ()
+{
+ return _msg;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Throwable.h
+ * \ingroup CXX_LANG_m
+ */
+
+#ifndef _CLASS_THROWABLE_H
+#define _CLASS_THROWABLE_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/String.h"
+using beecrypt::lang::String;
+
+namespace beecrypt {
+ namespace lang {
+ class BEECRYPTCXXAPI Throwable
+ {
+ private:
+ String _msg;
+
+ public:
+ Throwable() throw ();
+ Throwable(const String&) throw ();
+ Throwable(const Throwable&) throw ();
+
+ virtual ~Throwable() throw () {};
+
+ const String& getMessage() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file mutex.h
+ * \brief MUTually EXclusive lock class.
+ * \author Bob Deblier <bob.deblier@telenet.be>
+ * \ingroup CXX_m
+ */
+
+#ifndef _CLASS_BEECRYPT_MUTEX_H
+#define _CLASS_BEECRYPT_MUTEX_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#if HAVE_ERRNO_H
+# include <errno.h>
+#endif
+
+namespace beecrypt {
+ class BEECRYPTCXXAPI mutex
+ {
+ private:
+ bc_mutex_t _lock;
+
+ public:
+ inline void init() throw (char*)
+ {
+ #if WIN32
+ _lock = CreateMutex((LPSECURITY_ATTRIBUTES) 0, FALSE, (LPCSTR) 0);
+ if (!_lock)
+ throw "CreateMutex failed";
+ #else
+ register int rc;
+ # if HAVE_SYNCH_H
+ if ((rc = mutex_init(&_lock, USYNC_THREAD, 0)))
+ throw strerror(rc);
+ # elif HAVE_PTHREAD_H
+ if ((rc = pthread_mutex_init(&_lock, 0)))
+ throw strerror(rc);
+ # else
+ # error
+ # endif
+ #endif
+ }
+
+ inline void lock() throw (char*)
+ {
+ #if WIN32
+ if (WaitForSingleObject(_lock, INFINITE) == WAIT_OBJECT_0)
+ return;
+ throw "WaitForSingleObject failed";
+ #else
+ register int rc;
+ # if HAVE_SYNCH_H
+ if ((rc = mutex_lock(&_lock)))
+ throw strerror(rc);
+ # elif HAVE_PTHREAD_H
+ if ((rc = pthread_mutex_lock(&_lock)))
+ throw strerror(rc);
+ # else
+ # error
+ # endif
+ #endif
+ }
+
+ inline bool trylock() throw (char*)
+ {
+ #if WIN32
+ switch (WaitForSingleObject(_lock, 0))
+ {
+ case WAIT_TIMEOUT:
+ return false;
+ case WAIT_OBJECT_0:
+ return true;
+ default:
+ throw "WaitForSingleObbject failed";
+ }
+ #else
+ register int rc;
+ # if HAVE_SYNCH_H
+ if ((rc = mutex_trylock(&_lock)) == 0)
+ return true;
+ if (rc == EBUSY)
+ return false;
+ throw strerror(rc);
+ # elif HAVE_PTHREAD_H
+ if ((rc = pthread_mutex_trylock(&_lock)) == 0)
+ return true;
+ if (rc == EBUSY)
+ return false;
+ throw strerror(rc);
+ # else
+ # error
+ # endif
+ #endif
+ }
+
+ inline void unlock() throw (char*)
+ {
+ #if WIN32
+ if (!ReleaseMutex(_lock))
+ throw "ReleaseMutex failed";
+ #else
+ register int rc;
+ # if HAVE_SYNCH_H
+ if ((rc = mutex_unlock(&_lock)))
+ throw strerror(rc);
+ # elif HAVE_PTHREAD_H
+ if ((rc = pthread_mutex_unlock(&_lock)))
+ throw strerror(rc);
+ # else
+ # error
+ # endif
+ #endif
+ }
+
+ inline void destroy() throw (char*)
+ {
+ #if WIN32
+ if (!CloseHandle(_lock))
+ throw "CloseHandle failed";
+ #else
+ register int rc;
+ # if HAVE_SYNCH_H
+ if ((rc = mutex_destroy(&_lock)))
+ throw strerror(rc);
+ # elif HAVE_PTHREAD_H
+ if ((rc = pthread_mutex_destroy(&_lock)))
+ throw strerror(rc);
+ # else
+ # error
+ # endif
+ #endif
+ }
+ };
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/beeyond/BeeCertificate.h"
+using beecrypt::beeyond::BeeCertificate;
+#include "beecrypt/c++/provider/BeeCertificateFactory.h"
+
+using namespace beecrypt::provider;
+
+BeeCertificateFactory::BeeCertificateFactory()
+{
+}
+
+BeeCertificateFactory::~BeeCertificateFactory()
+{
+}
+
+Certificate* BeeCertificateFactory::engineGenerateCertificate(InputStream& in) throw (CertificateException)
+{
+ try
+ {
+ return new BeeCertificate(in);
+ }
+ catch (Exception& ex)
+ {
+ throw CertificateException(ex.getMessage());
+ }
+}
+
+vector<Certificate*>* BeeCertificateFactory::engineGenerateCertificates(InputStream& in) throw (CertificateException)
+{
+ vector<Certificate*>* result = new vector<Certificate*>;
+
+ try
+ {
+ while (in.available())
+ {
+ result->push_back(new BeeCertificate(in));
+ }
+ }
+ catch (...)
+ {
+ delete result;
+ throw;
+ }
+
+ return result;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeCertificateFactory.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_BEECERTIFICATEFACTORY_H
+#define _CLASS_BEECERTIFICATEFACTORY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/cert/CertificateFactorySpi.h"
+using beecrypt::security::cert::CertificateFactorySpi;
+
+namespace beecrypt {
+ namespace provider {
+ class BeeCertificateFactory : public CertificateFactorySpi
+ {
+ protected:
+ virtual Certificate* engineGenerateCertificate(InputStream& in) throw (CertificateException);
+ virtual vector<Certificate*>* engineGenerateCertificates(InputStream& in) throw (CertificateException);
+
+ public:
+ BeeCertificateFactory();
+ virtual ~BeeCertificateFactory();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/BeeCertificateFactory.h"
+#include "beecrypt/c++/provider/BeeCryptProvider.h"
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+#include "beecrypt/c++/provider/BeeKeyStore.h"
+#include "beecrypt/c++/provider/BeeSecureRandom.h"
+#include "beecrypt/c++/provider/DHKeyFactory.h"
+#include "beecrypt/c++/provider/DHKeyPairGenerator.h"
+#include "beecrypt/c++/provider/DHParameterGenerator.h"
+#include "beecrypt/c++/provider/DHParameters.h"
+#include "beecrypt/c++/provider/DSAKeyFactory.h"
+#include "beecrypt/c++/provider/DSAKeyPairGenerator.h"
+#include "beecrypt/c++/provider/DSAParameterGenerator.h"
+#include "beecrypt/c++/provider/DSAParameters.h"
+#include "beecrypt/c++/provider/HMACMD5.h"
+#include "beecrypt/c++/provider/HMACSHA256.h"
+#include "beecrypt/c++/provider/MD5Digest.h"
+#include "beecrypt/c++/provider/MD5withRSASignature.h"
+#include "beecrypt/c++/provider/PKCS12KeyFactory.h"
+#include "beecrypt/c++/provider/RSAKeyFactory.h"
+#include "beecrypt/c++/provider/RSAKeyPairGenerator.h"
+#include "beecrypt/c++/provider/SHA1Digest.h"
+#include "beecrypt/c++/provider/SHA1withDSASignature.h"
+#include "beecrypt/c++/provider/SHA1withRSASignature.h"
+#include "beecrypt/c++/provider/SHA256withRSASignature.h"
+
+namespace {
+ const String PROVIDER_NAME = UNICODE_STRING_SIMPLE("BeeCrypt++");
+ const String PROVIDER_INFO = UNICODE_STRING_SIMPLE("Copyright (c) 2004 Beeyond Software Holding");
+ const double PROVIDER_VERSION = 0.1;
+}
+
+extern "C" {
+
+#if WIN32
+# define PROVAPI __declspec(dllexport)
+#else
+# define PROVAPI
+#endif
+
+PROVAPI
+void* beecrypt_BeeCertificateFactory_create()
+{
+ return new beecrypt::provider::BeeCertificateFactory();
+}
+
+PROVAPI
+void* beecrypt_BeeKeyFactory_create()
+{
+ return new beecrypt::provider::BeeKeyFactory();
+}
+
+PROVAPI
+void* beecrypt_BeeKeyStore_create()
+{
+ return new beecrypt::provider::BeeKeyStore();
+}
+
+PROVAPI
+void* beecrypt_BeeSecureRandom_create()
+{
+ return new beecrypt::provider::BeeSecureRandom();
+}
+
+PROVAPI
+void* beecrypt_DHKeyFactory_create()
+{
+ return new beecrypt::provider::DHKeyFactory();
+}
+
+PROVAPI
+void* beecrypt_DHKeyPairGenerator_create()
+{
+ return new beecrypt::provider::DHKeyPairGenerator();
+}
+
+PROVAPI
+void* beecrypt_HParameterGenerator_create()
+{
+ return new beecrypt::provider::DHParameterGenerator();
+}
+
+PROVAPI
+void* beecrypt_DHParameters_create()
+{
+ return new beecrypt::provider::DHParameters();
+}
+
+PROVAPI
+void* beecrypt_DSAKeyFactory_create()
+{
+ return new beecrypt::provider::DSAKeyFactory();
+}
+
+PROVAPI
+void* beecrypt_DSAKeyPairGenerator_create()
+{
+ return new beecrypt::provider::DSAKeyPairGenerator();
+}
+
+PROVAPI
+void* beecrypt_DSAParameterGenerator_create()
+{
+ return new beecrypt::provider::DSAParameterGenerator();
+}
+
+PROVAPI
+void* beecrypt_DSAParameters_create()
+{
+ return new beecrypt::provider::DSAParameters();
+}
+
+PROVAPI
+void* beecrypt_HMACMD5_create()
+{
+ return new beecrypt::provider::HMACMD5();
+}
+
+PROVAPI
+void* beecrypt_HMACSHA256_create()
+{
+ return new beecrypt::provider::HMACSHA256();
+}
+
+PROVAPI
+void* beecrypt_MD5Digest_create()
+{
+ return new beecrypt::provider::MD5Digest();
+}
+
+PROVAPI
+void* beecrypt_MD5withRSASignature_create()
+{
+ return new beecrypt::provider::MD5withRSASignature();
+}
+
+PROVAPI
+void* beecrypt_PKCS12KeyFactory_create()
+{
+ return new beecrypt::provider::PKCS12KeyFactory();
+}
+
+PROVAPI
+void* beecrypt_RSAKeyFactory_create()
+{
+ return new beecrypt::provider::RSAKeyFactory();
+}
+
+PROVAPI
+void* beecrypt_RSAKeyPairGenerator_create()
+{
+ return new beecrypt::provider::RSAKeyPairGenerator();
+}
+
+PROVAPI
+void* beecrypt_SHA1Digest_create()
+{
+ return new beecrypt::provider::SHA1Digest();
+}
+
+PROVAPI
+void* beecrypt_SHA1withDSASignature_create()
+{
+ return new beecrypt::provider::SHA1withDSASignature();
+}
+
+PROVAPI
+void* beecrypt_SHA1withRSASignature_create()
+{
+ return new beecrypt::provider::SHA1withRSASignature();
+}
+
+PROVAPI
+void* beecrypt_SHA256withRSASignature_create()
+{
+ return new beecrypt::provider::SHA256withRSASignature();
+}
+
+}
+
+using namespace beecrypt::provider;
+
+BeeCryptProvider::BeeCryptProvider() : Provider(PROVIDER_NAME, PROVIDER_VERSION, PROVIDER_INFO)
+{
+ _dlhandle = 0;
+
+ putall();
+}
+
+BeeCryptProvider::BeeCryptProvider(void* dlhandle) : Provider(PROVIDER_NAME, PROVIDER_VERSION, PROVIDER_INFO)
+{
+ _dlhandle = dlhandle;
+
+ putall();
+}
+
+BeeCryptProvider::~BeeCryptProvider()
+{
+}
+
+void BeeCryptProvider::putall()
+{
+ put("AlgorithmParameterGenerator.DH" , "beecrypt_DHParameterGenerator_create");
+ put("AlgorithmParameterGenerator.DSA" , "beecrypt_DSAParameterGenerator_create");
+ put("AlgorithmParameters.DH" , "beecrypt_DHParameters_create");
+ put("AlgorithmParameters.DSA" , "beecrypt_DSAParameters_create");
+ put("CertificateFactory.BEE" , "beecrypt_BeeCertificateFactory_create");
+ put("KeyFactory.BEE" , "beecrypt_BeeKeyFactory_create");
+ put("KeyFactory.DH" , "beecrypt_DHKeyFactory_create");
+ put("KeyFactory.DSA" , "beecrypt_DSAKeyFactory_create");
+ put("KeyFactory.RSA" , "beecrypt_RSAKeyFactory_create");
+ put("KeyStore.BEE" , "beecrypt_BeeKeyStore_create");
+ put("KeyPairGenerator.DH" , "beecrypt_DHKeyPairGenerator_create");
+ put("KeyPairGenerator.DSA" , "beecrypt_DSAKeyPairGenerator_create");
+ put("KeyPairGenerator.RSA" , "beecrypt_RSAKeyPairGenerator_create");
+ put("Mac.HMAC-MD5" , "beecrypt_HMACMD5_create");
+ put("Mac.HMAC-SHA-1" , "beecrypt_HMACSHA1_create");
+ put("Mac.HMAC-SHA-256" , "beecrypt_HMACSHA256_create");
+ put("MessageDigest.MD5" , "beecrypt_MD5Digest_create");
+ put("MessageDigest.SHA-1" , "beecrypt_SHA1Digest_create");
+ put("SecretKeyFactory.PKCS#12/PBE" , "beecrypt_PKCS12KeyFactory_create");
+ put("SecureRandom.BEE" , "beecrypt_BeeSecureRandom_create");
+ put("Signature.MD5withRSA" , "beecrypt_MD5withRSASignature_create");
+ put("Signature.SHA1withDSA" , "beecrypt_SHA1withDSASignature_create");
+ put("Signature.SHA1withRSA" , "beecrypt_SHA1withRSASignature_create");
+ put("Signature.SHA256withRSA" , "beecrypt_SHA256withRSASignature_create");
+ put("Alg.Alias.KeyFactory.DiffieHellman" , "KeyFactory.DH");
+ put("Alg.Alias.KeyPairGenerator.DiffieHellman" , "KeyFactory.DH");
+ put("Alg.Alias.Signature.DSS" , "Signature.SHA1withDSA");
+ put("Alg.Alias.Signature.SHAwithDSA" , "Signature.SHA1withDSA");
+ put("Alg.Alias.Signature.SHA/DSA" , "Signature.SHA1withDSA");
+ put("Alg.Alias.Signature.SHA-1/DSA" , "Signature.SHA1withDSA");
+}
+
+namespace {
+ bool init = false;
+ BeeCryptProvider* singleton;
+}
+
+extern "C" {
+
+#if WIN32
+__declspec(dllexport)
+BOOL WINAPI DllMain(HINSTANCE hInst, DWORD wDataSeg, LPVOID lpReserved)
+{
+ switch (wDataSeg)
+ {
+ case DLL_PROCESS_ATTACH:
+ break;
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
+__declspec(dllexport)
+#endif
+const Provider& provider_const_ref(void *dlhandle)
+{
+ if (!init)
+ {
+ singleton = new BeeCryptProvider(dlhandle);
+ init = true;
+ }
+ return *singleton;
+}
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeCryptProvider.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_BEECRYPTPROVIDER_H
+#define _CLASS_BEECRYPTPROVIDER_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+
+namespace beecrypt {
+ namespace provider {
+ class BeeCryptProvider : public Provider
+ {
+ private:
+ void putall();
+
+ public:
+ BeeCryptProvider();
+ BeeCryptProvider(void*);
+ virtual ~BeeCryptProvider();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/beeyond/BeeEncodedKeySpec.h"
+using beecrypt::beeyond::BeeEncodedKeySpec;
+#include "beecrypt/c++/beeyond/BeeInputStream.h"
+using beecrypt::beeyond::BeeInputStream;
+#include "beecrypt/c++/beeyond/BeeOutputStream.h"
+using beecrypt::beeyond::BeeOutputStream;
+#include "beecrypt/c++/io/ByteArrayInputStream.h"
+using beecrypt::io::ByteArrayInputStream;
+#include "beecrypt/c++/io/ByteArrayOutputStream.h"
+using beecrypt::io::ByteArrayOutputStream;
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+#include "beecrypt/c++/provider/DHPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/DHPublicKeyImpl.h"
+#include "beecrypt/c++/provider/DSAPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/DSAPublicKeyImpl.h"
+#include "beecrypt/c++/provider/RSAPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/RSAPrivateCrtKeyImpl.h"
+#include "beecrypt/c++/provider/RSAPublicKeyImpl.h"
+
+namespace {
+ const String ALGORITHM_DH = UNICODE_STRING_SIMPLE("DH");
+ const String ALGORITHM_DSA = UNICODE_STRING_SIMPLE("DSA");
+ const String ALGORITHM_RSA = UNICODE_STRING_SIMPLE("RSA");
+}
+
+using namespace beecrypt::provider;
+
+BeeKeyFactory::BeeKeyFactory()
+{
+}
+
+BeeKeyFactory::~BeeKeyFactory()
+{
+}
+
+PrivateKey* BeeKeyFactory::decodePrivate(const byte* data, size_t offset, size_t size)
+{
+ try
+ {
+ String algo;
+
+ ByteArrayInputStream bis(data, offset, size);
+ BeeInputStream bee(bis);
+
+ bee.readUTF(algo);
+
+ if (algo == ALGORITHM_DH)
+ {
+ mpbarrett p;
+ mpnumber g;
+ mpnumber x;
+
+ bee.read(p);
+ bee.read(g);
+ bee.read(x);
+
+ return new DHPrivateKeyImpl(p, g, x);
+ }
+
+ if (algo == ALGORITHM_DSA)
+ {
+ mpbarrett p;
+ mpbarrett q;
+ mpnumber g;
+ mpnumber x;
+
+ bee.read(p);
+ bee.read(q);
+ bee.read(g);
+ bee.read(x);
+
+ return new DSAPrivateKeyImpl(p, q, g, x);
+ }
+
+ if (algo == ALGORITHM_RSA)
+ {
+ mpbarrett n;
+ mpnumber d;
+
+ bee.read(n);
+ bee.read(d);
+
+ if (bee.available() > 0)
+ {
+ mpnumber e;
+ mpbarrett p;
+ mpbarrett q;
+ mpnumber dp;
+ mpnumber dq;
+ mpnumber qi;
+
+ bee.read(e);
+ bee.read(p);
+ bee.read(q);
+ bee.read(dp);
+ bee.read(dq);
+ bee.read(qi);
+
+ return new RSAPrivateCrtKeyImpl(n, e, d, p, q, dp, dq, qi);
+ }
+ return new RSAPrivateKeyImpl(n, d);
+ }
+ }
+ catch (IOException)
+ {
+ }
+ return 0;
+}
+
+PublicKey* BeeKeyFactory::decodePublic(const byte* data, size_t offset, size_t size)
+{
+ try
+ {
+ String algo;
+
+ ByteArrayInputStream bis(data, offset, size);
+ BeeInputStream bee(bis);
+
+ bee.readUTF(algo);
+
+ if (algo == ALGORITHM_DH)
+ {
+ mpbarrett p;
+ mpnumber g;
+ mpnumber y;
+
+ bee.read(p);
+ bee.read(g);
+ bee.read(y);
+
+ return new DHPublicKeyImpl(p, g, y);
+ }
+
+ if (algo == ALGORITHM_DSA)
+ {
+ mpbarrett p;
+ mpbarrett q;
+ mpnumber g;
+ mpnumber y;
+
+ bee.read(p);
+ bee.read(q);
+ bee.read(g);
+ bee.read(y);
+
+ return new DSAPublicKeyImpl(p, q, g, y);
+ }
+
+ if (algo == ALGORITHM_RSA)
+ {
+ mpbarrett n;
+ mpnumber e;
+
+ bee.read(n);
+ bee.read(e);
+
+ return new RSAPublicKeyImpl(n, e);
+ }
+ }
+ catch (IOException)
+ {
+ }
+ return 0;
+}
+
+bytearray* BeeKeyFactory::encode(const PrivateKey& pri)
+{
+ try
+ {
+ ByteArrayOutputStream bos;
+ BeeOutputStream bee(bos);
+
+ bee.writeUTF(pri.getAlgorithm());
+
+ const DHPrivateKey* dh = dynamic_cast<const DHPrivateKey*>(&pri);
+ if (dh)
+ {
+ bee.write(dh->getParams().getP());
+ bee.write(dh->getParams().getG());
+ bee.write(dh->getX());
+ bee.close();
+
+ return bos.toByteArray();
+ }
+
+ const DSAPrivateKey* dsa = dynamic_cast<const DSAPrivateKey*>(&pri);
+ if (dsa)
+ {
+ bee.write(dsa->getParams().getP());
+ bee.write(dsa->getParams().getQ());
+ bee.write(dsa->getParams().getG());
+ bee.write(dsa->getX());
+ bee.close();
+
+ return bos.toByteArray();
+ }
+
+ const RSAPrivateKey* rsa = dynamic_cast<const RSAPrivateKey*>(&pri);
+ if (rsa)
+ {
+ bee.write(rsa->getModulus());
+
+ const RSAPrivateCrtKey* crt = dynamic_cast<const RSAPrivateCrtKey*>(rsa);
+
+ if (crt)
+ {
+ bee.write(crt->getPublicExponent());
+ bee.write(crt->getPrivateExponent());
+ bee.write(crt->getPrimeP());
+ bee.write(crt->getPrimeQ());
+ bee.write(crt->getPrimeExponentP());
+ bee.write(crt->getPrimeExponentQ());
+ bee.write(crt->getCrtCoefficient());
+ }
+ else
+ {
+ bee.write(rsa->getPrivateExponent());
+ }
+ bee.close();
+
+ return bos.toByteArray();
+ }
+ }
+ catch (IOException)
+ {
+ }
+ return 0;
+}
+
+
+bytearray* BeeKeyFactory::encode(const PublicKey& pub)
+{
+ try
+ {
+ ByteArrayOutputStream bos;
+ BeeOutputStream bee(bos);
+
+ bee.writeUTF(pub.getAlgorithm());
+
+ const DHPublicKey* dh = dynamic_cast<const DHPublicKey*>(&pub);
+ if (dh)
+ {
+ bee.write(dh->getParams().getP());
+ bee.write(dh->getParams().getG());
+ bee.write(dh->getY());
+ bee.close();
+
+ return bos.toByteArray();
+ }
+
+ const DSAPublicKey* dsa = dynamic_cast<const DSAPublicKey*>(&pub);
+ if (dsa)
+ {
+ bee.write(dsa->getParams().getP());
+ bee.write(dsa->getParams().getQ());
+ bee.write(dsa->getParams().getG());
+ bee.write(dsa->getY());
+ bee.close();
+
+ return bos.toByteArray();
+ }
+
+ const RSAPublicKey* rsa = dynamic_cast<const RSAPublicKey*>(&pub);
+ if (rsa)
+ {
+ bee.write(rsa->getModulus());
+ bee.write(rsa->getPublicExponent());
+ bee.close();
+
+ return bos.toByteArray();
+ }
+ }
+ catch (IOException)
+ {
+ }
+ return 0;
+}
+
+PrivateKey* BeeKeyFactory::engineGeneratePrivate(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const EncodedKeySpec* enc = dynamic_cast<const EncodedKeySpec*>(&spec);
+
+ if (enc && enc->getFormat().caseCompare("BEE", 0) == 0)
+ {
+ const bytearray& encoding = enc->getEncoded();
+
+ PrivateKey* pri = decodePrivate(encoding.data(), 0, encoding.size());
+
+ if (pri)
+ return pri;
+ else
+ throw InvalidKeySpecException("Unable to decode this KeySpec to a PrivateKey");
+ }
+ else
+ throw InvalidKeySpecException("Unsupported KeySpec");
+}
+
+PublicKey* BeeKeyFactory::engineGeneratePublic(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const EncodedKeySpec* enc = dynamic_cast<const EncodedKeySpec*>(&spec);
+
+ if (enc && enc->getFormat().caseCompare("BEE", 0) == 0)
+ {
+ const bytearray& encoding = enc->getEncoded();
+
+ PublicKey* pub = decodePublic(encoding.data(), 0, encoding.size());
+
+ if (pub)
+ return pub;
+ else
+ throw InvalidKeySpecException("Unable to decode this KeySpec to a PublicKey");
+ }
+ else
+ throw InvalidKeySpecException("Unsupported KeySpec");
+}
+
+KeySpec* BeeKeyFactory::engineGetKeySpec(const Key& key, const type_info& info) throw (InvalidKeySpecException)
+{
+ KeySpec* result = 0;
+
+ if (info == typeid(EncodedKeySpec))
+ {
+ const String* format = key.getFormat();
+
+ if (format && format->caseCompare("BEE", 0) == 0)
+ {
+ result = new BeeEncodedKeySpec(*key.getEncoded());
+ }
+ else
+ {
+ bytearray* enc;
+
+ const PublicKey* pub = dynamic_cast<const PublicKey*>(&key);
+
+ if (pub)
+ {
+ enc = encode(*pub);
+ }
+ else
+ {
+ const PrivateKey* pri = dynamic_cast<const PrivateKey*>(&key);
+
+ if (pri)
+ {
+ enc = encode(*pri);
+ }
+ }
+
+ if (enc)
+ {
+ result = new BeeEncodedKeySpec(*enc);
+
+ delete enc;
+ }
+ }
+
+ if (result)
+ return result;
+ else
+ throw InvalidKeySpecException("Unsupported key type");
+ }
+ else
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+}
+
+Key* BeeKeyFactory::engineTranslateKey(const Key&) throw (InvalidKeyException)
+{
+ throw InvalidKeyException("This KeyFactory can only be used for encoding and decoding");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeKeyFactory.h
+ * \ingroup CXX_PROVIDER_m
+ */
+
+#ifndef _CLASS_BEEKEYFACTORY_H
+#define _CLASS_BEEKEYFACTORY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyFactorySpi.h"
+using beecrypt::security::InvalidKeyException;
+using beecrypt::security::Key;
+using beecrypt::security::KeyFactorySpi;
+using beecrypt::security::PrivateKey;
+using beecrypt::security::PublicKey;
+using beecrypt::security::spec::InvalidKeySpecException;
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace provider {
+ class BeeKeyFactory : public KeyFactorySpi
+ {
+ public:
+ static PrivateKey* decodePrivate(const byte*, size_t, size_t);
+ static PublicKey* decodePublic(const byte*, size_t, size_t);
+ static bytearray* encode(const PrivateKey&);
+ static bytearray* encode(const PublicKey&);
+
+ protected:
+ virtual PrivateKey* engineGeneratePrivate(const KeySpec&) throw (InvalidKeySpecException);
+ virtual PublicKey* engineGeneratePublic(const KeySpec&) throw (InvalidKeySpecException);
+
+ virtual KeySpec* engineGetKeySpec(const Key&, const type_info&) throw (InvalidKeySpecException);
+
+ virtual Key* engineTranslateKey(const Key&) throw (InvalidKeyException);
+
+ public:
+ BeeKeyFactory();
+ virtual ~BeeKeyFactory();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/aes.h"
+#include "beecrypt/pkcs12.h"
+#include "beecrypt/sha256.h"
+
+#include "beecrypt/c++/crypto/Mac.h"
+using beecrypt::crypto::Mac;
+#include "beecrypt/c++/io/ByteArrayInputStream.h"
+using beecrypt::io::ByteArrayInputStream;
+#include "beecrypt/c++/io/DataInputStream.h"
+using beecrypt::io::DataInputStream;
+#include "beecrypt/c++/io/DataOutputStream.h"
+using beecrypt::io::DataOutputStream;
+#include "beecrypt/c++/crypto/MacInputStream.h"
+using beecrypt::crypto::MacInputStream;
+#include "beecrypt/c++/crypto/MacOutputStream.h"
+using beecrypt::crypto::MacOutputStream;
+#include "beecrypt/c++/security/SecureRandom.h"
+using beecrypt::security::SecureRandom;
+#include "beecrypt/c++/beeyond/PKCS12PBEKey.h"
+using beecrypt::beeyond::PKCS12PBEKey;
+#include "beecrypt/c++/provider/KeyProtector.h"
+using beecrypt::provider::KeyProtector;
+#include "beecrypt/c++/provider/BeeKeyStore.h"
+
+using namespace beecrypt::provider;
+
+namespace {
+ const array<javachar> EMPTY_PASSWORD;
+}
+
+#define BKS_MAGIC ((javaint) 0xbeecceec)
+#define BKS_VERSION_1 ((javaint) 0x1)
+#define BKS_PRIVATEKEY_ENTRY ((javaint) 0x1)
+#define BKS_CERTIFICATE_ENTRY ((javaint) 0x2)
+
+BeeKeyStore::Entry::~Entry()
+{
+}
+
+BeeKeyStore::KeyEntry::KeyEntry()
+{
+}
+
+BeeKeyStore::KeyEntry::KeyEntry(const bytearray& b, const vector<Certificate*>& c)
+{
+ encryptedkey = b;
+ for (vector<Certificate*>::const_iterator it = c.begin(); it != c.end(); it++)
+ chain.push_back((*it)->clone());
+}
+
+BeeKeyStore::KeyEntry::~KeyEntry()
+{
+ // delete all the certificates in the chain
+ for (size_t i = 0; i < chain.size(); i++)
+ delete chain[i];
+}
+
+BeeKeyStore::CertEntry::CertEntry()
+{
+ cert = 0;
+}
+
+BeeKeyStore::CertEntry::CertEntry(const Certificate& c)
+{
+ cert = c.clone();
+}
+
+BeeKeyStore::CertEntry::~CertEntry()
+{
+ if (cert)
+ {
+ delete cert;
+ cert = 0;
+ }
+}
+
+BeeKeyStore::BeeKeyStore()
+{
+ _lock.init();
+}
+
+BeeKeyStore::~BeeKeyStore()
+{
+ _lock.lock();
+ clearall();
+ _lock.unlock();
+ _lock.destroy();
+}
+
+BeeKeyStore::AliasEnum::AliasEnum(const BeeKeyStore::entry_map& map)
+{
+ _it = map.begin();
+ _end = map.end();
+}
+
+BeeKeyStore::AliasEnum::~AliasEnum() throw ()
+{
+}
+
+bool BeeKeyStore::AliasEnum::hasMoreElements() throw ()
+{
+ return _it != _end;
+}
+
+const void* BeeKeyStore::AliasEnum::nextElement() throw (NoSuchElementException)
+{
+ if (_it == _end)
+ throw NoSuchElementException();
+
+ return (const void*) &((_it++)->first);
+}
+
+void BeeKeyStore::clearall()
+{
+ keyfactory_map::iterator kit = _keyfactories.begin();
+ while (kit != _keyfactories.end())
+ {
+ delete kit->second;
+ _keyfactories.erase(kit++);
+ }
+
+ certfactory_map::iterator cit = _certfactories.begin();
+ while (cit != _certfactories.end())
+ {
+ delete cit->second;
+ _certfactories.erase(cit++);
+ }
+
+ entry_map::iterator eit = _entries.begin();
+ while (eit != _entries.end())
+ {
+ delete eit->second;
+ _entries.erase(eit++);
+ }
+}
+
+Enumeration* BeeKeyStore::engineAliases()
+{
+ return new AliasEnum(_entries);
+}
+
+bool BeeKeyStore::engineContainsAlias(const String& alias)
+{
+ return (_entries[alias] != 0);
+}
+
+void BeeKeyStore::engineDeleteEntry(const String& alias) throw (KeyStoreException)
+{
+ _lock.lock();
+ entry_map::iterator it = _entries.find(alias);
+
+ if (it != _entries.end())
+ {
+ delete it->second;
+ _entries.erase(it);
+ }
+ _lock.unlock();
+}
+
+const Date* BeeKeyStore::engineGetCreationDate(const String& alias)
+{
+ const Date* result = 0;
+
+ _lock.lock();
+ entry_map::iterator it = _entries.find(alias);
+ if (it != _entries.end())
+ result = &(it->second->date);
+ _lock.unlock();
+ return result;
+}
+
+const Certificate* BeeKeyStore::engineGetCertificate(const String& alias)
+{
+ const Certificate* result = 0;
+
+ _lock.lock();
+ entry_map::iterator it = _entries.find(alias);
+ if (it != _entries.end())
+ {
+ CertEntry* ce = dynamic_cast<CertEntry*>(it->second);
+ if (ce)
+ result = ce->cert;
+ }
+ _lock.unlock();
+ return result;
+}
+
+const String* BeeKeyStore::engineGetCertificateAlias(const Certificate& cert)
+{
+ const String* result = 0;
+
+ _lock.lock();
+ for (entry_map::const_iterator it = _entries.begin(); it != _entries.end(); ++it)
+ {
+ const CertEntry* ce = dynamic_cast<const CertEntry*>(it->second);
+ if (ce)
+ {
+ if (cert == *(ce->cert))
+ {
+ result = &(it->first);
+ break;
+ }
+ }
+ }
+ _lock.unlock();
+ return result;
+}
+
+const vector<Certificate*>* BeeKeyStore::engineGetCertificateChain(const String& alias)
+{
+ const vector<Certificate*>* result = 0;
+
+ _lock.unlock();
+ entry_map::iterator it = _entries.find(alias);
+ if (it != _entries.end())
+ {
+ KeyEntry* ke = dynamic_cast<KeyEntry*>(it->second);
+ if (ke)
+ result = &ke->chain;
+ }
+ _lock.unlock();
+ return result;
+}
+
+bool BeeKeyStore::engineIsCertificateEntry(const String& alias)
+{
+ bool result = false;
+ _lock.lock();
+ entry_map::iterator it = _entries.find(alias);
+ if (it != _entries.end())
+ result = (dynamic_cast<CertEntry*>(it->second) != 0);
+ _lock.unlock();
+ return result;
+}
+
+void BeeKeyStore::engineSetCertificateEntry(const String& alias, const Certificate& cert) throw (KeyStoreException)
+{
+ _entries[alias] = new CertEntry(cert);
+}
+
+Key* BeeKeyStore::engineGetKey(const String& alias, const array<javachar>& password) throw (NoSuchAlgorithmException, UnrecoverableKeyException)
+{
+ Key* result = 0;
+
+ _lock.lock();
+ entry_map::iterator it = _entries.find(alias);
+ if (it != _entries.end())
+ {
+ KeyEntry* ke = dynamic_cast<KeyEntry*>(it->second);
+ if (ke)
+ {
+ PKCS12PBEKey pbekey(password, &_salt, _iter);
+
+ try
+ {
+ KeyProtector p(pbekey);
+
+ result = p.recover(ke->encryptedkey);
+ }
+ catch (InvalidKeyException e)
+ {
+ _lock.unlock();
+ throw KeyStoreException(e.getMessage());
+ }
+ catch (...)
+ {
+ _lock.unlock();
+ throw;
+ }
+ }
+ }
+ _lock.unlock();
+
+ return result;
+}
+
+bool BeeKeyStore::engineIsKeyEntry(const String& alias)
+{
+ bool result = false;
+ _lock.lock();
+ entry_map::iterator it = _entries.find(alias);
+ if (it != _entries.end())
+ result = (dynamic_cast<KeyEntry*>(it->second) != 0);
+ _lock.unlock();
+ return result;
+}
+
+void BeeKeyStore::engineSetKeyEntry(const String& alias, const bytearray& key, const vector<Certificate*>& chain) throw (KeyStoreException)
+{
+ _lock.lock();
+ _entries[alias] = new KeyEntry(key, chain);
+ _lock.unlock();
+}
+
+void BeeKeyStore::engineSetKeyEntry(const String& alias, const Key& key, const array<javachar>& password, const vector<Certificate*>& chain) throw (KeyStoreException)
+{
+ PKCS12PBEKey pbekey(password, &_salt, _iter);
+
+ try
+ {
+ const PrivateKey* pri = dynamic_cast<const PrivateKey*>(&key);
+ if (pri)
+ {
+ KeyProtector p(pbekey);
+
+ bytearray *tmp = p.protect(*pri);
+
+ if (tmp)
+ engineSetKeyEntry(alias, *tmp, chain);
+ else
+ throw KeyStoreException("Failed to protect key");
+ }
+ else
+ throw KeyStoreException("BeeKeyStore only supports storing of PrivateKey objects");
+ }
+ catch (InvalidKeyException e)
+ {
+ throw KeyStoreException(e.getMessage());
+ }
+}
+
+size_t BeeKeyStore::engineSize() const
+{
+ return _entries.size();
+}
+
+void BeeKeyStore::engineLoad(InputStream* in, const array<javachar>* password) throw (IOException, CertificateException, NoSuchAlgorithmException)
+{
+ _lock.lock();
+
+ if (in == 0)
+ {
+ randomGeneratorContext rngc;
+
+ /* salt size default is 64 bytes */
+ _salt.resize(64);
+ /* generate a new salt */
+ randomGeneratorContextNext(&rngc, _salt.data(), _salt.size());
+ /* set default iteration count */
+ _iter = 1024;
+
+ _lock.unlock();
+
+ return;
+ }
+
+ Mac* m = 0;
+
+ try
+ {
+ m = Mac::getInstance("HMAC-SHA-256");
+
+ MacInputStream mis(*in, *m);
+ DataInputStream dis(mis);
+
+ mis.on(false);
+
+ javaint magic = dis.readInt();
+ javaint version = dis.readInt();
+
+ if (magic != BKS_MAGIC || version != BKS_VERSION_1)
+ throw IOException("Invalid KeyStore format");
+
+ clearall();
+
+ javaint saltsize = dis.readInt();
+ if (saltsize <= 0)
+ throw IOException("Invalid KeyStore salt size");
+
+ _salt.resize(saltsize);
+ dis.readFully(_salt);
+
+ _iter = dis.readInt();
+ if (_iter <= 0)
+ throw IOException("Invalid KeyStore iteration count");
+
+ PKCS12PBEKey pbekey(password ? *password : EMPTY_PASSWORD, &_salt, _iter);
+
+ m->init(pbekey);
+
+ mis.on(true);
+
+ javaint entrycount = dis.readInt();
+
+ if (entrycount <= 0)
+ throw IOException("Invalid KeyStore entry count");
+
+ for (javaint i = 0; i < entrycount; i++)
+ {
+ String alias;
+
+ switch (dis.readInt())
+ {
+ case BKS_PRIVATEKEY_ENTRY:
+ {
+ dis.readUTF(alias);
+
+ KeyEntry* e = new KeyEntry;
+
+ try
+ {
+ e->date.setTime(dis.readLong());
+
+ javaint keysize = dis.readInt();
+
+ if (keysize <= 0)
+ throw IOException("Invalid KeyStore key length");
+
+ e->encryptedkey.resize((size_t) keysize);
+
+ dis.readFully(e->encryptedkey);
+
+ javaint certcount = dis.readInt();
+
+ if (certcount <= 0)
+ throw IOException("Invalid KeyStore certificate count");
+
+ for (javaint j = 0; j < certcount; j++)
+ {
+ String type;
+
+ dis.readUTF(type);
+
+ // see if we have a CertificateFactory of this type available
+ CertificateFactory* cf = _certfactories[type];
+ if (!cf)
+ {
+ // apparently not; get a new one and cache it
+ _certfactories[type] = cf = CertificateFactory::getInstance(type);
+ }
+
+ javaint certsize = dis.readInt();
+
+ if (certsize <= 0)
+ throw IOException("Invalid KeyStore certificate size");
+
+ bytearray cert(certsize);
+
+ dis.readFully(cert);
+
+ ByteArrayInputStream bis(cert);
+
+ e->chain.push_back(cf->generateCertificate(bis));
+ }
+
+ _entries[alias] = e;
+ }
+ catch (...)
+ {
+ delete e;
+ throw;
+ }
+ }
+ break;
+
+ case BKS_CERTIFICATE_ENTRY:
+ {
+ dis.readUTF(alias);
+
+ CertEntry* e = new CertEntry;
+
+ try
+ {
+ e->date.setTime(dis.readLong());
+
+ String type;
+
+ dis.readUTF(type);
+
+ // see if we have a CertificateFactory of this type available
+ CertificateFactory* cf = _certfactories[type];
+ if (!cf)
+ {
+ // apparently not; get a new one and cache it
+ _certfactories[type] = cf = CertificateFactory::getInstance(type);
+ }
+
+ javaint certsize = dis.readInt();
+
+ if (certsize <= 0)
+ throw IOException("Invalid KeyStore certificate size");
+
+ bytearray cert(certsize);
+
+ dis.readFully(cert);
+
+ ByteArrayInputStream bis(cert);
+
+ e->cert = cf->generateCertificate(bis);
+
+ _entries[alias] = e;
+ }
+ catch (...)
+ {
+ delete e;
+ throw;
+ }
+ }
+ break;
+
+ default:
+ throw IOException("Invalid KeyStore entry tag");
+ }
+ }
+
+ bytearray computed_mac, original_mac;
+
+ mis.on(false);
+
+ javaint macsize = dis.available();
+ if (macsize <= 0)
+ throw IOException("Invalid KeyStore MAC size");
+
+ computed_mac = m->doFinal();
+ if (macsize != computed_mac.size())
+ throw KeyStoreException("KeyStore has been tampered with, or password was incorrect");
+
+ original_mac.resize(macsize);
+ dis.readFully(original_mac);
+
+ if (computed_mac != original_mac)
+ throw KeyStoreException("KeyStore has been tampered with, or password was incorrect");
+
+ delete m;
+ }
+ catch (...)
+ {
+ if (m)
+ delete m;
+
+ _lock.unlock();
+ throw;
+ }
+
+ _lock.unlock();
+}
+
+void BeeKeyStore::engineStore(OutputStream& out, const array<javachar>* password) throw (IOException, CertificateException, NoSuchAlgorithmException)
+{
+ _lock.lock();
+
+ Mac* m = 0;
+
+ try
+ {
+ m = Mac::getInstance("HMAC-SHA-256");
+
+ PKCS12PBEKey pbekey(password ? *password : EMPTY_PASSWORD, &_salt, _iter);
+
+ m->init(pbekey);
+
+ MacOutputStream mos(out, *m);
+ DataOutputStream dos(mos);
+
+ mos.on(false);
+ dos.writeInt(BKS_MAGIC);
+ dos.writeInt(BKS_VERSION_1);
+ dos.writeInt(_salt.size());
+ dos.write(_salt);
+ dos.writeInt(_iter);
+ mos.on(true);
+ dos.writeInt(_entries.size());
+
+ for (entry_map::const_iterator it = _entries.begin(); it != _entries.end(); ++it)
+ {
+ const KeyEntry* ke = dynamic_cast<const KeyEntry*>(it->second);
+ if (ke)
+ {
+ dos.writeInt(BKS_PRIVATEKEY_ENTRY);
+ dos.writeUTF(it->first);
+ dos.writeLong(ke->date.getTime());
+ dos.writeInt(ke->encryptedkey.size());
+ dos.write(ke->encryptedkey);
+ /* next do all the certificates for this key */
+ dos.writeInt(ke->chain.size());
+ for (vector<Certificate*>::const_iterator cit = ke->chain.begin(); cit != ke->chain.end(); ++cit)
+ {
+ const Certificate* cert = *cit;
+
+ dos.writeUTF(cert->getType());
+ dos.writeInt(cert->getEncoded().size());
+ dos.write(cert->getEncoded());
+ }
+ continue;
+ }
+
+ const CertEntry* ce = dynamic_cast<const CertEntry*>(it->second);
+ if (ce)
+ {
+ dos.writeInt(BKS_CERTIFICATE_ENTRY);
+ dos.writeUTF(it->first);
+ dos.writeLong(ce->date.getTime());
+ dos.writeUTF(ce->cert->getType());
+ dos.writeInt(ce->cert->getEncoded().size());
+ dos.write(ce->cert->getEncoded());
+ continue;
+ }
+
+ throw RuntimeException();
+ }
+ /* don't call close on a FilterOutputStream because the
+ * underlying stream still has to write data!
+ */
+ dos.flush();
+ mos.flush();
+
+ out.write(m->doFinal());
+ out.close();
+
+ _lock.unlock();
+ }
+ catch (...)
+ {
+ _lock.unlock();
+ throw;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeKeyStore.h
+ * \ingroup CXX_PROVIDER_m
+ */
+
+#ifndef _CLASS_BEEKEYSTORE_H
+#define _CLASS_BEEKEYSTORE_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/mutex.h"
+using beecrypt::mutex;
+#include "beecrypt/c++/security/KeyStoreSpi.h"
+using beecrypt::security::KeyStoreSpi;
+#include "beecrypt/c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+#include "beecrypt/c++/security/cert/CertificateFactory.h"
+using beecrypt::security::cert::CertificateFactory;
+#include "beecrypt/c++/util/Enumeration.h"
+using beecrypt::util::Enumeration;
+
+#include <map>
+using std::map;
+
+namespace beecrypt {
+ namespace provider {
+ /*!\brief The default BeeCrypt KeyStore.
+ */
+ class BeeKeyStore : public KeyStoreSpi
+ {
+ private:
+ mutex _lock;
+ bytearray _bmac;
+ bytearray _salt;
+ size_t _iter;
+
+ struct Entry
+ {
+ Date date;
+ virtual ~Entry();
+ };
+
+ struct KeyEntry : public Entry
+ {
+ bytearray encryptedkey;
+ vector<Certificate*> chain;
+
+ KeyEntry();
+ KeyEntry(const bytearray& key, const vector<Certificate*>&);
+ virtual ~KeyEntry();
+ };
+
+ struct CertEntry : public Entry
+ {
+ Certificate* cert;
+
+ CertEntry();
+ CertEntry(const Certificate&);
+ virtual ~CertEntry();
+ };
+
+ typedef map<String, KeyFactory*> keyfactory_map;
+ keyfactory_map _keyfactories;
+
+ typedef map<String, CertificateFactory*> certfactory_map;
+ certfactory_map _certfactories;
+
+ typedef map<String, Entry*> entry_map;
+ entry_map _entries;
+
+ struct AliasEnum : public Enumeration
+ {
+ entry_map::const_iterator _it;
+ entry_map::const_iterator _end;
+
+ AliasEnum(const entry_map&);
+ virtual ~AliasEnum() throw ();
+
+ virtual bool hasMoreElements() throw ();
+ virtual const void* nextElement() throw (NoSuchElementException);
+ };
+
+ void clearall();
+
+ protected:
+ virtual Enumeration* engineAliases();
+
+ virtual bool engineContainsAlias(const String& alias);
+
+ virtual void engineDeleteEntry(const String& alias) throw (KeyStoreException);
+ virtual const Date* engineGetCreationDate(const String& alias);
+
+ virtual const Certificate* engineGetCertificate(const String& alias);
+ virtual const String* engineGetCertificateAlias(const Certificate& cert);
+ virtual const vector<Certificate*>* engineGetCertificateChain(const String& alias);
+ virtual bool engineIsCertificateEntry(const String& alias);
+ virtual void engineSetCertificateEntry(const String& alias, const Certificate& cert) throw (KeyStoreException);
+
+ virtual Key* engineGetKey(const String& alias, const array<javachar>& password) throw (NoSuchAlgorithmException, UnrecoverableKeyException);
+ virtual bool engineIsKeyEntry(const String& alias);
+ virtual void engineSetKeyEntry(const String& alias, const bytearray& key, const vector<Certificate*>&) throw (KeyStoreException);
+ virtual void engineSetKeyEntry(const String& alias, const Key& key, const array<javachar>& password, const vector<Certificate*>&) throw (KeyStoreException);
+
+ virtual size_t engineSize() const;
+
+ virtual void engineLoad(InputStream* in, const array<javachar>* password) throw (IOException, CertificateException, NoSuchAlgorithmException);
+ virtual void engineStore(OutputStream& out, const array<javachar>* password) throw (IOException, CertificateException, NoSuchAlgorithmException);
+
+ public:
+ BeeKeyStore();
+ ~BeeKeyStore();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/BeeSecureRandom.h"
+
+using namespace beecrypt::provider;
+
+BeeSecureRandom::BeeSecureRandom()
+{
+}
+
+BeeSecureRandom::BeeSecureRandom(const randomGenerator* rng) : _rngc(rng)
+{
+}
+
+BeeSecureRandom::~BeeSecureRandom()
+{
+}
+
+SecureRandomSpi* BeeSecureRandom::create()
+{
+ return new BeeSecureRandom();
+}
+
+void BeeSecureRandom::engineGenerateSeed(byte* data, size_t size)
+{
+ entropyGatherNext(data, size);
+}
+
+void BeeSecureRandom::engineNextBytes(byte* data, size_t size)
+{
+ randomGeneratorContextNext(&_rngc, data, size);
+}
+
+void BeeSecureRandom::engineSetSeed(const byte* data, size_t size)
+{
+ randomGeneratorContextSeed(&_rngc, data, size);
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file BeeSecureRandom.h
+ * \ingroup CXX_PROVIDER_m
+ */
+
+#ifndef _CLASS_BEESECURERANDOM_H
+#define _CLASS_BEESECURERANDOM_H
+
+#include "beecrypt/beecrypt.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/SecureRandomSpi.h"
+using beecrypt::security::SecureRandomSpi;
+
+namespace beecrypt {
+ namespace provider {
+ class BeeSecureRandom : public SecureRandomSpi
+ {
+ private:
+ randomGeneratorContext _rngc;
+
+ protected:
+ BeeSecureRandom(const randomGenerator*);
+
+ private:
+ static SecureRandomSpi* create();
+
+ virtual void engineGenerateSeed(byte*, size_t);
+ virtual void engineNextBytes(byte*, size_t);
+ virtual void engineSetSeed(const byte*, size_t);
+
+ public:
+ BeeSecureRandom();
+ virtual ~BeeSecureRandom();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/crypto/spec/DHPrivateKeySpec.h"
+using beecrypt::crypto::spec::DHPrivateKeySpec;
+#include "beecrypt/c++/crypto/spec/DHPublicKeySpec.h"
+using beecrypt::crypto::spec::DHPublicKeySpec;
+#include "beecrypt/c++/provider/DHKeyFactory.h"
+#include "beecrypt/c++/provider/DHPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/DHPublicKeyImpl.h"
+#include "beecrypt/c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+#include "beecrypt/c++/security/spec/EncodedKeySpec.h"
+using beecrypt::security::spec::EncodedKeySpec;
+
+using namespace beecrypt::provider;
+
+DHKeyFactory::DHKeyFactory()
+{
+}
+
+DHKeyFactory::~DHKeyFactory()
+{
+}
+
+PrivateKey* DHKeyFactory::engineGeneratePrivate(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const DHPrivateKeySpec* dh = dynamic_cast<const DHPrivateKeySpec*>(&spec);
+ if (dh)
+ {
+ return new DHPrivateKeyImpl(dh->getP(), dh->getG(), dh->getX());
+ }
+
+ const EncodedKeySpec* enc = dynamic_cast<const EncodedKeySpec*>(&spec);
+ if (enc)
+ {
+ try
+ {
+ KeyFactory* kf = KeyFactory::getInstance(enc->getFormat());
+ try
+ {
+ PrivateKey* pri = kf->generatePrivate(*enc);
+ delete kf;
+ return pri;
+ }
+ catch (...)
+ {
+ delete kf;
+ throw;
+ }
+ }
+ catch (NoSuchAlgorithmException)
+ {
+ throw InvalidKeySpecException("Unsupported KeySpec encoding format");
+ }
+ }
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+}
+
+PublicKey* DHKeyFactory::engineGeneratePublic(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const DHPublicKeySpec* dh = dynamic_cast<const DHPublicKeySpec*>(&spec);
+ if (dh)
+ {
+ return new DHPublicKeyImpl(dh->getP(), dh->getG(), dh->getY());
+ }
+
+ const EncodedKeySpec* enc = dynamic_cast<const EncodedKeySpec*>(&spec);
+ if (enc)
+ {
+ try
+ {
+ KeyFactory* kf = KeyFactory::getInstance(enc->getFormat());
+ try
+ {
+ PublicKey* pub = kf->generatePublic(*enc);
+ delete kf;
+ return pub;
+ }
+ catch (...)
+ {
+ delete kf;
+ throw;
+ }
+ }
+ catch (NoSuchAlgorithmException)
+ {
+ throw InvalidKeySpecException("Unsupported KeySpec encoding format");
+ }
+ }
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+}
+
+KeySpec* DHKeyFactory::engineGetKeySpec(const Key& key, const type_info& info) throw (InvalidKeySpecException)
+{
+ const DHPublicKey* pub = dynamic_cast<const DHPublicKey*>(&key);
+ if (pub)
+ {
+ if (info == typeid(KeySpec) || info == typeid(DHPrivateKeySpec))
+ {
+ const DHParams& params = pub->getParams();
+
+ return new DHPublicKeySpec(params.getP(), params.getG(), pub->getY());
+ }
+ /*!\todo also support EncodedKeySpec
+ */
+ /*
+ if (info == typeid(EncodedKeySpec))
+ {
+ }
+ */
+
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+ }
+
+ const DHPrivateKey* pri = dynamic_cast<const DHPrivateKey*>(&key);
+ if (pri)
+ {
+ if (info == typeid(KeySpec) || info == typeid(DHPublicKeySpec))
+ {
+ const DHParams& params = pri->getParams();
+
+ return new DHPrivateKeySpec(params.getP(), params.getG(), pri->getX());
+ }
+ /*!\todo also support EncodedKeySpec
+ */
+ /*
+ if (info == typeid(EncodedKeySpec))
+ {
+ }
+ */
+
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+ }
+
+ throw InvalidKeySpecException("Unsupported Key type");
+}
+
+Key* DHKeyFactory::engineTranslateKey(const Key& key) throw (InvalidKeyException)
+{
+ const DHPublicKey* pub = dynamic_cast<const DHPublicKey*>(&key);
+ if (pub)
+ return new DHPublicKeyImpl(*pub);
+
+ const DHPrivateKey* pri = dynamic_cast<const DHPrivateKey*>(&key);
+ if (pri)
+ return new DHPrivateKeyImpl(*pri);
+
+ throw InvalidKeyException("Unsupported Key type");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHKeyFactory.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DHKEYFACTORY_H
+#define _CLASS_DHKEYFACTORY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyFactorySpi.h"
+using beecrypt::security::InvalidKeyException;
+using beecrypt::security::Key;
+using beecrypt::security::KeyFactorySpi;
+using beecrypt::security::PrivateKey;
+using beecrypt::security::PublicKey;
+using beecrypt::security::spec::InvalidKeySpecException;
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DHKeyFactory : public KeyFactorySpi
+ {
+ protected:
+ virtual PrivateKey* engineGeneratePrivate(const KeySpec&) throw (InvalidKeySpecException);
+ virtual PublicKey* engineGeneratePublic(const KeySpec&) throw (InvalidKeySpecException);
+
+ virtual KeySpec* engineGetKeySpec(const Key&, const type_info&) throw (InvalidKeySpecException);
+
+ virtual Key* engineTranslateKey(const Key&) throw (InvalidKeyException);
+
+ public:
+ DHKeyFactory();
+ virtual ~DHKeyFactory();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/adapter.h"
+#include "beecrypt/c++/crypto/spec/DHParameterSpec.h"
+#include "beecrypt/c++/provider/DHKeyPairGenerator.h"
+#include "beecrypt/c++/provider/DHPublicKeyImpl.h"
+#include "beecrypt/c++/provider/DHPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/BeeCryptProvider.h"
+#include "beecrypt/c++/security/KeyPair.h"
+
+#include "beecrypt/dldp.h"
+
+/* precomputed safe primes; it's easy to create generators for these;
+ *
+ * using a dldp_p struct, set p from the hex value; set q = p/2 and r = 2
+ * then call dldp_pgonGenerator.
+ */
+namespace {
+ const char* P_2048 = "fd12e8b7e096a28a00fb548035953cf0eba64ceb5dff0f5672d376d59c196da729f6b5586f18e6f3f1a86c73c5b15662f59439613b309e52aa257488619e5f76a7c4c3f7a426bdeac66bf88343482941413cef06256b39c62744dcb97e7b78e36ec6b885b143f6f3ad0a1cd8a5713e338916613892a264d4a47e72b583fbdaf5bce2bbb0097f7e65cbc86d684882e5bb8196d522dcacd6ad00dfbcd8d21613bdb59c485a65a58325d792272c09ad1173e12c98d865adb4c4d676ada79830c58c37c42dff8536e28f148a23f296513816d3dfed0397a3d4d6e1fa24f07e1b01643a68b4274646a3b876e810206eddacea2b9ef7636a1da5880ef654288b857ea3";
+ const char* P_1024 = "e64a3deeddb723e2e4db54c2b09567d196367a86b3b302be07e43ffd7f2e016f866de5135e375bdd2fba6ea9b4299010fafa36dc6b02ba3853cceea07ee94bfe30e0cc82a69c73163be26e0c4012dfa0b2839c97d6cd71eee59a303d6177c6a6740ca63bd04c1ba084d6c369dc2fbfaeebe951d58a4824de52b580442d8cae77";
+};
+
+using namespace beecrypt::provider;
+
+DHKeyPairGenerator::DHKeyPairGenerator()
+{
+ _size = 0;
+ _spec = 0;
+ _srng = 0;
+}
+
+DHKeyPairGenerator::~DHKeyPairGenerator()
+{
+ _size = 0;
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _srng = 0;
+}
+
+KeyPair* DHKeyPairGenerator::genpair(randomGeneratorContext* rngc)
+{
+ dhparam param;
+ size_t l;
+ mpnumber x;
+ mpnumber y;
+
+ if (_spec)
+ {
+ param.p = _spec->getP();
+ param.g = _spec->getG();
+ l = _spec->getL();
+ }
+ else
+ {
+ if (_size == 2048)
+ {
+ mpbsethex(¶m.p, P_2048);
+ }
+ else if (_size == 1024 || _size == 0)
+ {
+ mpbsethex(¶m.p, P_1024);
+ }
+
+ if (_size == 2048 || _size == 1024 || _size == 0)
+ {
+ mpnumber q;
+
+ /* set q to half of P */
+ mpnset(&q, param.p.size, param.p.modl);
+ mpdivtwo(q.size, q.data);
+ mpbset(¶m.q, q.size, q.data);
+ /* set r to 2 */
+ mpnsetw(¶m.r, 2);
+
+ /* make a generator, order n */
+ dldp_pgonGenerator(¶m, rngc);
+ }
+ else
+ {
+ if (dldp_pgonMakeSafe(¶m, rngc, _size))
+ throw "unexpected error in dldp_pMakeSafe";
+ }
+ }
+
+ if (_spec && _spec->getL())
+ dldp_pPair_s(¶m, rngc, &x, &y, _spec->getL());
+ else
+ dldp_pPair (¶m, rngc, &x, &y);
+
+ KeyPair* result = new KeyPair(new DHPublicKeyImpl(param, y), new DHPrivateKeyImpl(param, x));
+
+ x.wipe();
+
+ return result;
+}
+
+KeyPair* DHKeyPairGenerator::engineGenerateKeyPair()
+{
+ if (_srng)
+ {
+ randomGeneratorContextAdapter rngc(_srng);
+
+ return genpair(&rngc);
+ }
+ else
+ {
+ randomGeneratorContext rngc(randomGeneratorDefault());
+
+ return genpair(&rngc);
+ }
+}
+
+void DHKeyPairGenerator::engineInitialize(const AlgorithmParameterSpec& spec, SecureRandom* random) throw (InvalidAlgorithmParameterException)
+{
+ const DHParameterSpec* dhspec = dynamic_cast<const DHParameterSpec*>(&spec);
+
+ if (dhspec)
+ {
+ if (_spec)
+ delete _spec;
+
+ _spec = new DHParameterSpec(*dhspec);
+ _srng = random;
+ }
+ else
+ throw InvalidAlgorithmParameterException("not a DHParameterSpec");
+}
+
+void DHKeyPairGenerator::engineInitialize(size_t keysize, SecureRandom* random) throw (InvalidParameterException)
+{
+ if (keysize < 768)
+ throw InvalidParameterException("Safe prime size must be at least 768 bits");
+
+ _size = keysize;
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _srng = random;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHKeyPairGenerator.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DHKEYPAIRGENERATOR_H
+#define _CLASS_DHKEYPAIRGENERATOR_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/spec/DHParameterSpec.h"
+using beecrypt::crypto::spec::DHParameterSpec;
+#include "beecrypt/c++/security/KeyPairGeneratorSpi.h"
+using beecrypt::security::KeyPairGeneratorSpi;
+
+namespace beecrypt {
+ namespace provider {
+ class DHKeyPairGenerator : public KeyPairGeneratorSpi
+ {
+ private:
+ size_t _size;
+ size_t _l;
+ DHParameterSpec* _spec;
+ SecureRandom* _srng;
+
+ KeyPair* genpair(randomGeneratorContext*);
+
+ protected:
+ virtual KeyPair* engineGenerateKeyPair();
+
+ virtual void engineInitialize(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException);
+ virtual void engineInitialize(size_t, SecureRandom*) throw (InvalidParameterException);
+
+ public:
+ DHKeyPairGenerator();
+ virtual ~DHKeyPairGenerator();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/adapter.h"
+using beecrypt::randomGeneratorContextAdapter;
+#include "beecrypt/c++/provider/BeeCryptProvider.h"
+#include "beecrypt/c++/provider/DHParameterGenerator.h"
+#include "beecrypt/c++/security/AlgorithmParameters.h"
+using beecrypt::security::AlgorithmParameters;
+#include "beecrypt/c++/crypto/spec/DHParameterSpec.h"
+using beecrypt::crypto::spec::DHParameterSpec;
+
+using namespace beecrypt::provider;
+
+DHParameterGenerator::DHParameterGenerator()
+{
+ _size = 0;
+ _spec = 0;
+ _srng = 0;
+}
+
+DHParameterGenerator::~DHParameterGenerator()
+{
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _size = 0;
+ _srng = 0;
+}
+
+AlgorithmParameters* DHParameterGenerator::engineGenerateParameters()
+{
+ if (!_spec)
+ {
+ dldp_p param;
+
+ if (_srng)
+ {
+ randomGeneratorContextAdapter rngc(_srng);
+ if (dldp_pgonMakeSafe(¶m, &rngc, _size))
+ throw "unexpected error in dldp_pMake";
+ }
+ else
+ {
+ randomGeneratorContext rngc(randomGeneratorDefault());
+ if (dldp_pgonMakeSafe(¶m, &rngc, _size))
+ throw "unexpected error in dldp_pMake";
+ }
+
+ _spec = new DHParameterSpec(param.p, param.g);
+ }
+
+ try
+ {
+ AlgorithmParameters* param = AlgorithmParameters::getInstance("DH");
+
+ param->init(*_spec);
+
+ return param;
+ }
+ catch (Exception* ex)
+ {
+ // shouldn't happen
+ delete ex;
+ }
+
+ return 0;
+}
+
+void DHParameterGenerator::engineInit(const AlgorithmParameterSpec& spec, SecureRandom* random) throw (InvalidAlgorithmParameterException)
+{
+ const DHParameterSpec* dhspec = dynamic_cast<const DHParameterSpec*>(&spec);
+
+ if (dhspec)
+ {
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+
+ _spec = new DHParameterSpec(*dhspec);
+
+ _srng = random;
+ }
+ else
+ throw InvalidAlgorithmParameterException("expected DHParameterSpec");
+}
+
+void DHParameterGenerator::engineInit(size_t keysize, SecureRandom* random) throw (InvalidParameterException)
+{
+ if ((keysize < 768) || ((keysize & 0x3f) != 0))
+ throw InvalidParameterException("Prime size must be greater than 768 and be a multiple of 64");
+
+ _size = keysize;
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _srng = random;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHParameterGenerator.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DHPARAMETERGENERATOR_H
+#define _CLASS_DHPARAMETERGENERATOR_H
+
+#include "beecrypt/dldp.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/AlgorithmParameterGeneratorSpi.h"
+using beecrypt::security::AlgorithmParameterGeneratorSpi;
+#include "beecrypt/c++/crypto/spec/DHParameterSpec.h"
+using beecrypt::crypto::spec::DHParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DHParameterGenerator : public AlgorithmParameterGeneratorSpi
+ {
+ private:
+ size_t _size;
+ DHParameterSpec* _spec;
+ SecureRandom* _srng;
+
+ protected:
+ virtual AlgorithmParameters* engineGenerateParameters();
+
+ virtual void engineInit(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException);
+ virtual void engineInit(size_t, SecureRandom*) throw (InvalidParameterException);
+
+ public:
+ DHParameterGenerator();
+ virtual ~DHParameterGenerator();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/BeeCryptProvider.h"
+#include "beecrypt/c++/provider/DHParameters.h"
+
+using namespace beecrypt::provider;
+
+DHParameters::DHParameters()
+{
+ _spec = 0;
+}
+
+DHParameters::~DHParameters()
+{
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+}
+
+AlgorithmParameterSpec* DHParameters::engineGetParameterSpec(const type_info& info) throw (InvalidParameterSpecException)
+{
+ if (info == typeid(AlgorithmParameterSpec) || info == typeid(DHParameterSpec))
+ {
+ if (_spec)
+ {
+ return new DHParameterSpec(*_spec);
+ }
+ else
+ throw InvalidParameterSpecException("not initialized");
+ }
+ else
+ throw InvalidParameterSpecException("expected a DHParameterSpec");
+}
+
+void DHParameters::engineInit(const AlgorithmParameterSpec& spec) throw (InvalidParameterSpecException)
+{
+ const DHParameterSpec* tmp = dynamic_cast<const DHParameterSpec*>(&spec);
+
+ if (tmp)
+ {
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _spec = new DHParameterSpec(*tmp);
+ }
+ else
+ throw InvalidParameterSpecException("expected a DHParameterSpec");
+}
+
+void DHParameters::engineInit(const byte*, size_t)
+{
+ throw "not implemented";
+}
+
+void DHParameters::engineInit(const byte*, size_t, const String& format)
+{
+ throw "not implemented";
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHParameters.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DHPARAMETERS_H
+#define _CLASS_DHPARAMETERS_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/AlgorithmParametersSpi.h"
+using beecrypt::security::AlgorithmParametersSpi;
+#include "beecrypt/c++/crypto/spec/DHParameterSpec.h"
+using beecrypt::crypto::spec::DHParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DHParameters : public AlgorithmParametersSpi
+ {
+ private:
+ DHParameterSpec* _spec;
+
+ protected:
+ virtual AlgorithmParameterSpec* engineGetParameterSpec(const type_info&) throw (InvalidParameterSpecException);
+
+ virtual void engineInit(const AlgorithmParameterSpec&) throw (InvalidParameterSpecException);
+ virtual void engineInit(const byte*, size_t);
+ virtual void engineInit(const byte*, size_t, const String&);
+
+ public:
+ DHParameters();
+ virtual ~DHParameters();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/resource.h"
+#include "beecrypt/c++/provider/DHPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+
+using namespace beecrypt::provider;
+
+DHPrivateKeyImpl::DHPrivateKeyImpl(const DHPrivateKey& copy)
+{
+ _params = new DHParameterSpec(copy.getParams());
+ _x = copy.getX();
+ _enc = 0;
+}
+
+DHPrivateKeyImpl::DHPrivateKeyImpl(const DHParams& params, const mpnumber& x)
+{
+ _params = new DHParameterSpec(params.getP(), params.getG(), params.getL());
+ _x = x;
+ _enc = 0;
+}
+
+DHPrivateKeyImpl::DHPrivateKeyImpl(const dhparam& params, const mpnumber& x)
+{
+ _params = new DHParameterSpec(params.p, params.g);
+ _x = x;
+ _enc = 0;
+}
+
+DHPrivateKeyImpl::DHPrivateKeyImpl(const mpbarrett& p, const mpnumber& g, const mpnumber& x)
+{
+ _params = new DHParameterSpec(p, g);
+ _x = x;
+ _enc = 0;
+}
+
+DHPrivateKeyImpl::~DHPrivateKeyImpl()
+{
+ delete _params;
+ _x.wipe();
+ if (_enc);
+ delete _enc;
+}
+
+DHPrivateKey* DHPrivateKeyImpl::clone() const
+{
+ return new DHPrivateKeyImpl(*this);
+}
+
+const DHParams& DHPrivateKeyImpl::getParams() const throw ()
+{
+ return *_params;
+}
+
+const mpnumber& DHPrivateKeyImpl::getX() const throw ()
+{
+ return _x;
+}
+
+const bytearray* DHPrivateKeyImpl::getEncoded() const
+{
+ if (!_enc)
+ _enc = BeeKeyFactory::encode(*this);
+
+ return _enc;
+}
+
+const String& DHPrivateKeyImpl::getAlgorithm() const throw ()
+{
+ static const String ALGORITHM = UNICODE_STRING_SIMPLE("DH");
+ return ALGORITHM;
+}
+
+const String* DHPrivateKeyImpl::getFormat() const throw ()
+{
+ static const String FORMAT = UNICODE_STRING_SIMPLE("BEE");
+ return &FORMAT;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHPrivateKeyImpl.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DHPRIVATEKEYIMPL_H
+#define _CLASS_DHPRIVATEKEYIMPL_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/interfaces/DHPrivateKey.h"
+using beecrypt::crypto::interfaces::DHPrivateKey;
+#include "beecrypt/c++/crypto/spec/DHParameterSpec.h"
+using beecrypt::crypto::spec::DHParameterSpec;
+
+using beecrypt::bytearray;
+using beecrypt::crypto::interfaces::DHParams;
+using beecrypt::lang::String;
+
+namespace beecrypt {
+ namespace provider {
+ class DHPrivateKeyImpl : public DHPrivateKey
+ {
+ private:
+ DHParameterSpec* _params;
+ mpnumber _x;
+ mutable bytearray* _enc;
+
+ public:
+ DHPrivateKeyImpl(const DHPrivateKey&);
+ DHPrivateKeyImpl(const DHParams&, const mpnumber&);
+ DHPrivateKeyImpl(const dhparam&, const mpnumber&);
+ DHPrivateKeyImpl(const mpbarrett&, const mpnumber&, const mpnumber&);
+ virtual ~DHPrivateKeyImpl();
+
+ virtual DHPrivateKey* clone() const;
+
+ virtual const DHParams& getParams() const throw ();
+ virtual const mpnumber& getX() const throw ();
+
+ virtual const bytearray* getEncoded() const;
+
+ virtual const String& getAlgorithm() const throw ();
+ virtual const String* getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+#include "beecrypt/c++/provider/DHPublicKeyImpl.h"
+
+using namespace beecrypt::provider;
+
+DHPublicKeyImpl::DHPublicKeyImpl(const DHPublicKey& copy)
+{
+ _params = new DHParameterSpec(copy.getParams());
+ _y = copy.getY();
+ _enc = 0;
+}
+
+DHPublicKeyImpl::DHPublicKeyImpl(const DHParams& params, const mpnumber& y)
+{
+ _params = new DHParameterSpec(params.getP(), params.getG(), params.getL());
+ _y = y;
+ _enc = 0;
+}
+
+DHPublicKeyImpl::DHPublicKeyImpl(const dhparam& params, const mpnumber& y)
+{
+ _params = new DHParameterSpec(params.p, params.g);
+ _y = y;
+ _enc = 0;
+}
+
+DHPublicKeyImpl::DHPublicKeyImpl(const mpbarrett& p, const mpnumber& g, const mpnumber& y)
+{
+ _params = new DHParameterSpec(p, g);
+ _y = y;
+ _enc = 0;
+}
+
+DHPublicKeyImpl::~DHPublicKeyImpl()
+{
+ delete _params;
+ if (_enc)
+ delete _enc;
+}
+
+DHPublicKey* DHPublicKeyImpl::clone() const
+{
+ return new DHPublicKeyImpl(*this);
+}
+
+const DHParams& DHPublicKeyImpl::getParams() const throw ()
+{
+ return *_params;
+}
+
+const mpnumber& DHPublicKeyImpl::getY() const throw ()
+{
+ return _y;
+}
+
+const bytearray* DHPublicKeyImpl::getEncoded() const
+{
+ if (!_enc)
+ _enc = BeeKeyFactory::encode(*this);
+
+ return _enc;
+}
+
+const String& DHPublicKeyImpl::getAlgorithm() const throw ()
+{
+ static const String ALGORITHM = UNICODE_STRING_SIMPLE("DH");
+ return ALGORITHM;
+}
+
+const String* DHPublicKeyImpl::getFormat() const throw ()
+{
+ static const String FORMAT = UNICODE_STRING_SIMPLE("BEE");
+ return &FORMAT;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DHPublicKeyImpl.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DHPUBLICKEYIMPL_H
+#define _CLASS_DHPUBLICKEYIMPL_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/interfaces/DHPublicKey.h"
+using beecrypt::crypto::interfaces::DHPublicKey;
+#include "beecrypt/c++/crypto/spec/DHParameterSpec.h"
+using beecrypt::crypto::spec::DHParameterSpec;
+
+using beecrypt::bytearray;
+using beecrypt::crypto::interfaces::DHParams;
+using beecrypt::lang::String;
+
+namespace beecrypt {
+ namespace provider {
+ class DHPublicKeyImpl : public DHPublicKey
+ {
+ private:
+ DHParameterSpec* _params;
+ mpnumber _y;
+ mutable bytearray* _enc;
+
+ public:
+ DHPublicKeyImpl(const DHPublicKey&);
+ DHPublicKeyImpl(const DHParams&, const mpnumber&);
+ DHPublicKeyImpl(const dhparam&, const mpnumber&);
+ DHPublicKeyImpl(const mpbarrett&, const mpnumber&, const mpnumber&);
+ ~DHPublicKeyImpl();
+
+ virtual DHPublicKey* clone() const;
+
+ virtual const DHParams& getParams() const throw ();
+ virtual const mpnumber& getY() const throw ();
+
+ virtual const bytearray* getEncoded() const;
+
+ virtual const String& getAlgorithm() const throw ();
+ virtual const String* getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/DSAKeyFactory.h"
+#include "beecrypt/c++/provider/DSAPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/DSAPublicKeyImpl.h"
+#include "beecrypt/c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+#include "beecrypt/c++/security/spec/DSAPrivateKeySpec.h"
+using beecrypt::security::spec::DSAPrivateKeySpec;
+#include "beecrypt/c++/security/spec/DSAPublicKeySpec.h"
+using beecrypt::security::spec::DSAPublicKeySpec;
+#include "beecrypt/c++/security/spec/EncodedKeySpec.h"
+using beecrypt::security::spec::EncodedKeySpec;
+
+using namespace beecrypt::provider;
+
+DSAKeyFactory::DSAKeyFactory()
+{
+}
+
+DSAKeyFactory::~DSAKeyFactory()
+{
+}
+
+PrivateKey* DSAKeyFactory::engineGeneratePrivate(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const DSAPrivateKeySpec* dsa = dynamic_cast<const DSAPrivateKeySpec*>(&spec);
+ if (dsa)
+ {
+ return new DSAPrivateKeyImpl(dsa->getP(), dsa->getQ(), dsa->getG(), dsa->getX());
+ }
+
+ const EncodedKeySpec* enc = dynamic_cast<const EncodedKeySpec*>(&spec);
+ if (enc)
+ {
+ try
+ {
+ KeyFactory* kf = KeyFactory::getInstance(enc->getFormat());
+ try
+ {
+ PrivateKey* pri = kf->generatePrivate(*enc);
+ delete kf;
+ return pri;
+ }
+ catch (...)
+ {
+ delete kf;
+ throw;
+ }
+ }
+ catch (NoSuchAlgorithmException)
+ {
+ throw InvalidKeySpecException("Unsupported KeySpec encoding format");
+ }
+ }
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+}
+
+PublicKey* DSAKeyFactory::engineGeneratePublic(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const DSAPublicKeySpec* dsa = dynamic_cast<const DSAPublicKeySpec*>(&spec);
+ if (dsa)
+ {
+ return new DSAPublicKeyImpl(dsa->getP(), dsa->getQ(), dsa->getG(), dsa->getY());
+ }
+
+ const EncodedKeySpec* enc = dynamic_cast<const EncodedKeySpec*>(&spec);
+ if (enc)
+ {
+ try
+ {
+ KeyFactory* kf = KeyFactory::getInstance(enc->getFormat());
+ try
+ {
+ PublicKey* pub = kf->generatePublic(*enc);
+ delete kf;
+ return pub;
+ }
+ catch (...)
+ {
+ delete kf;
+ throw;
+ }
+ }
+ catch (NoSuchAlgorithmException)
+ {
+ throw InvalidKeySpecException("Unsupported KeySpec encoding format");
+ }
+ }
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+}
+
+KeySpec* DSAKeyFactory::engineGetKeySpec(const Key& key, const type_info& info) throw (InvalidKeySpecException)
+{
+ const DSAPublicKey* pub = dynamic_cast<const DSAPublicKey*>(&key);
+
+ if (pub)
+ {
+ if (info == typeid(KeySpec) || info == typeid(DSAPublicKeySpec))
+ {
+ const DSAParams& params = pub->getParams();
+
+ return new DSAPublicKeySpec(params.getP(), params.getQ(), params.getG(), pub->getY());
+ }
+ /*!\todo also support EncodeKeySpec
+ */
+ /*
+ if (info == typeid(EncodedKeySpec))
+ {
+ }
+ */
+
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+ }
+
+ const DSAPrivateKey* pri = dynamic_cast<const DSAPrivateKey*>(&key);
+
+ if (pri)
+ {
+ if (info == typeid(KeySpec) || info == typeid(DSAPrivateKeySpec))
+ {
+ const DSAParams& params = pri->getParams();
+
+ return new DSAPrivateKeySpec(params.getP(), params.getQ(), params.getG(), pri->getX());
+ }
+ /*!\todo also support EncodeKeySpec
+ */
+ /*
+ if (info == typeid(EncodedKeySpec))
+ {
+ }
+ */
+
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+ }
+
+ throw InvalidKeySpecException("Unsupported Key type");
+}
+
+Key* DSAKeyFactory::engineTranslateKey(const Key& key) throw (InvalidKeyException)
+{
+ const DSAPublicKey* pub = dynamic_cast<const DSAPublicKey*>(&key);
+ if (pub)
+ return new DSAPublicKeyImpl(*pub);
+
+ const DSAPrivateKey* pri = dynamic_cast<const DSAPrivateKey*>(&key);
+ if (pri)
+ return new DSAPrivateKeyImpl(*pri);
+
+ throw InvalidKeyException("Unsupported Key type");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAKeyFactory.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DSAKEYFACTORY_H
+#define _CLASS_DSAKEYFACTORY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyFactorySpi.h"
+using beecrypt::security::InvalidKeyException;
+using beecrypt::security::Key;
+using beecrypt::security::KeyFactorySpi;
+using beecrypt::security::PrivateKey;
+using beecrypt::security::PublicKey;
+using beecrypt::security::spec::InvalidKeySpecException;
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DSAKeyFactory : public KeyFactorySpi
+ {
+ protected:
+ virtual PrivateKey* engineGeneratePrivate(const KeySpec&) throw (InvalidKeySpecException);
+ virtual PublicKey* engineGeneratePublic(const KeySpec&) throw (InvalidKeySpecException);
+
+ virtual KeySpec* engineGetKeySpec(const Key&, const type_info&) throw (InvalidKeySpecException);
+
+ virtual Key* engineTranslateKey(const Key&) throw (InvalidKeyException);
+
+ public:
+ DSAKeyFactory();
+ virtual ~DSAKeyFactory();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/adapter.h"
+using beecrypt::randomGeneratorContextAdapter;
+#include "beecrypt/c++/provider/BeeCryptProvider.h"
+#include "beecrypt/c++/provider/DSAKeyPairGenerator.h"
+#include "beecrypt/c++/provider/DSAPublicKeyImpl.h"
+#include "beecrypt/c++/provider/DSAPrivateKeyImpl.h"
+#include "beecrypt/c++/security/KeyPair.h"
+using beecrypt::security::KeyPair;
+#include "beecrypt/c++/security/spec/DSAParameterSpec.h"
+using beecrypt::security::spec::DSAParameterSpec;
+
+namespace {
+ const char* P_512 = "fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17";
+ const char* Q_512 = "962eddcc369cba8ebb260ee6b6a126d9346e38c5";
+ const char* G_512 = "678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d14271b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca4";
+
+ const char* P_768 = "e9e642599d355f37c97ffd3567120b8e25c9cd43e927b3a9670fbec5d890141922d2c3b3ad2480093799869d1e846aab49fab0ad26d2ce6a22219d470bce7d777d4a21fbe9c270b57f607002f3cef8393694cf45ee3688c11a8c56ab127a3daf";
+ const char* Q_768 = "9cdbd84c9f1ac2f38d0f80f42ab952e7338bf511";
+ const char* G_768 = "30470ad5a005fb14ce2d9dcd87e38bc7d1b1c5facbaecbe95f190aa7a31d23c4dbbcbe06174544401a5b2c020965d8c2bd2171d3668445771f74ba084d2029d83c1c158547f3a9f1a2715be23d51ae4d3e5a1f6a7064f316933a346d3f529252";
+
+ const char* P_1024 = "fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7";
+ const char* Q_1024 = "9760508f15230bccb292b982a2eb840bf0581cf5";
+ const char* G_1024 = "f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a";
+};
+
+using namespace beecrypt::provider;
+
+DSAKeyPairGenerator::DSAKeyPairGenerator()
+{
+ _size = 0;
+ _spec = 0;
+ _srng = 0;
+}
+
+DSAKeyPairGenerator::~DSAKeyPairGenerator()
+{
+ _size = 0;
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _srng = 0;
+}
+
+KeyPair* DSAKeyPairGenerator::genpair(randomGeneratorContext* rngc)
+{
+ dsaparam param;
+ mpnumber x;
+ mpnumber y;
+
+ if (_spec)
+ {
+ param.p = _spec->getP();
+ param.q = _spec->getQ();
+ param.g = _spec->getG();
+ }
+ else
+ {
+ if (_size == 512)
+ {
+ mpbsethex(¶m.p, P_512);
+ mpbsethex(¶m.q, Q_512);
+ mpnsethex(¶m.g, G_512);
+ }
+ else if (_size == 768)
+ {
+ mpbsethex(¶m.p, P_768);
+ mpbsethex(¶m.q, Q_768);
+ mpnsethex(¶m.g, G_768);
+ }
+ else if ((_size == 1024) || !_size)
+ {
+ mpbsethex(¶m.p, P_1024);
+ mpbsethex(¶m.q, Q_1024);
+ mpnsethex(¶m.g, G_1024);
+ }
+ else
+ {
+ if (dsaparamMake(¶m, rngc, _size))
+ throw "unexpected error in dsaparamMake";
+ }
+ }
+
+ if (dldp_pPair(¶m, rngc, &x, &y))
+ throw "unexpected error in dldp_pPair";
+
+ KeyPair* result = new KeyPair(new DSAPublicKeyImpl(param, y), new DSAPrivateKeyImpl(param, x));
+
+ x.wipe();
+
+ return result;
+}
+
+KeyPair* DSAKeyPairGenerator::engineGenerateKeyPair()
+{
+ if (_srng)
+ {
+ randomGeneratorContextAdapter rngc(_srng);
+
+ return genpair(&rngc);
+ }
+ else
+ {
+ randomGeneratorContext rngc(randomGeneratorDefault());
+
+ return genpair(&rngc);
+ }
+}
+
+void DSAKeyPairGenerator::engineInitialize(const AlgorithmParameterSpec& spec, SecureRandom* random) throw (InvalidAlgorithmParameterException)
+{
+ const DSAParameterSpec* dsaspec = dynamic_cast<const DSAParameterSpec*>(&spec);
+
+ if (dsaspec)
+ {
+ if (_spec)
+ delete _spec;
+
+ _spec = new DSAParameterSpec(*dsaspec);
+ _srng = random;
+ }
+ else
+ throw InvalidAlgorithmParameterException("not a DSAParameterSpec");
+}
+
+void DSAKeyPairGenerator::engineInitialize(size_t keysize, SecureRandom* random) throw (InvalidParameterException)
+{
+ if ((keysize < 512) || (keysize > 1024) || ((keysize & 0x3f) != 0))
+ throw InvalidParameterException("Prime size must range from 512 to 1024 bits and be a multiple of 64");
+
+ _size = keysize;
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _srng = random;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAKeyPairGenerator.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DSAKEYPAIRGENERATOR_H
+#define _CLASS_DSAKEYPAIRGENERATOR_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyPairGeneratorSpi.h"
+using beecrypt::security::KeyPairGeneratorSpi;
+#include "beecrypt/c++/security/SecureRandom.h"
+using beecrypt::security::SecureRandom;
+#include "beecrypt/c++/security/spec/DSAParameterSpec.h"
+using beecrypt::security::spec::DSAParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DSAKeyPairGenerator : public KeyPairGeneratorSpi
+ {
+ private:
+ size_t _size;
+ DSAParameterSpec* _spec;
+ SecureRandom* _srng;
+
+ KeyPair* genpair(randomGeneratorContext*);
+
+ protected:
+ virtual KeyPair* engineGenerateKeyPair();
+
+ virtual void engineInitialize(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException);
+ virtual void engineInitialize(size_t, SecureRandom*) throw (InvalidParameterException);
+
+ public:
+ DSAKeyPairGenerator();
+ virtual ~DSAKeyPairGenerator();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/adapter.h"
+using beecrypt::randomGeneratorContextAdapter;
+#include "beecrypt/c++/provider/BeeCryptProvider.h"
+#include "beecrypt/c++/provider/DSAParameterGenerator.h"
+#include "beecrypt/c++/security/AlgorithmParameters.h"
+using beecrypt::security::AlgorithmParameters;
+#include "beecrypt/c++/security/spec/DSAParameterSpec.h"
+using beecrypt::security::spec::DSAParameterSpec;
+
+using namespace beecrypt::provider;
+
+DSAParameterGenerator::DSAParameterGenerator()
+{
+ _size = 0;
+ _spec = 0;
+ _srng = 0;
+}
+
+DSAParameterGenerator::~DSAParameterGenerator()
+{
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _size = 0;
+ _srng = 0;
+}
+
+AlgorithmParameters* DSAParameterGenerator::engineGenerateParameters()
+{
+ if (!_spec)
+ {
+ dsaparam param;
+
+ if (_srng)
+ {
+ randomGeneratorContextAdapter rngc(_srng);
+ if (dsaparamMake(¶m, &rngc, _size))
+ throw "unexpected error in dsaparamMake";
+ }
+ else
+ {
+ randomGeneratorContext rngc(randomGeneratorDefault());
+ if (dsaparamMake(¶m, &rngc, _size))
+ throw "unexpected error in dsaparamMake";
+ }
+
+ _spec = new DSAParameterSpec(param.p, param.q, param.g);
+ }
+
+ try
+ {
+ AlgorithmParameters* param = AlgorithmParameters::getInstance("DSA");
+
+ param->init(*_spec);
+
+ return param;
+ }
+ catch (Exception* ex)
+ {
+ // shouldn't happen
+ delete ex;
+ }
+
+ return 0;
+}
+
+void DSAParameterGenerator::engineInit(const AlgorithmParameterSpec& spec, SecureRandom* random) throw (InvalidAlgorithmParameterException)
+{
+ const DSAParameterSpec* dsaspec = dynamic_cast<const DSAParameterSpec*>(&spec);
+
+ if (dsaspec)
+ {
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+
+ _spec = new DSAParameterSpec(*dsaspec);
+
+ _srng = random;
+ }
+ else
+ throw InvalidAlgorithmParameterException("expected DSAParameterSpec");
+}
+
+void DSAParameterGenerator::engineInit(size_t keysize, SecureRandom* random) throw (InvalidParameterException)
+{
+ if ((keysize < 512) || (keysize > 1024) || ((keysize & 0x3f) != 0))
+ throw InvalidParameterException("Prime size must range from 512 to 1024 bits and be a multiple of 64");
+
+ _size = keysize;
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _srng = random;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAParameterGenerator.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DSAPARAMETERGENERATOR_H
+#define _CLASS_DSAPARAMETERGENERATOR_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/AlgorithmParameterGeneratorSpi.h"
+using beecrypt::security::AlgorithmParameterGeneratorSpi;
+#include "beecrypt/c++/security/spec/DSAParameterSpec.h"
+using beecrypt::security::spec::DSAParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DSAParameterGenerator : public AlgorithmParameterGeneratorSpi
+ {
+ private:
+ size_t _size;
+ DSAParameterSpec* _spec;
+ SecureRandom* _srng;
+
+ protected:
+ virtual AlgorithmParameters* engineGenerateParameters();
+
+ virtual void engineInit(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException);
+ virtual void engineInit(size_t, SecureRandom*) throw (InvalidParameterException);
+
+ public:
+ DSAParameterGenerator();
+ virtual ~DSAParameterGenerator();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/BeeCryptProvider.h"
+#include "beecrypt/c++/provider/DSAParameters.h"
+
+using namespace beecrypt::provider;
+
+DSAParameters::DSAParameters()
+{
+ _spec = 0;
+}
+
+DSAParameters::~DSAParameters()
+{
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+}
+
+AlgorithmParameterSpec* DSAParameters::engineGetParameterSpec(const type_info& info) throw (InvalidParameterSpecException)
+{
+ if (info == typeid(AlgorithmParameterSpec) || info == typeid(DSAParameterSpec))
+ {
+ if (_spec)
+ {
+ return new DSAParameterSpec(*_spec);
+ }
+ else
+ throw InvalidParameterSpecException("not initialized");
+ }
+ else
+ throw InvalidParameterSpecException("expected a DSAParameterSpec");
+}
+
+void DSAParameters::engineInit(const AlgorithmParameterSpec& spec) throw (InvalidParameterSpecException)
+{
+ const DSAParameterSpec* tmp = dynamic_cast<const DSAParameterSpec*>(&spec);
+
+ if (tmp)
+ {
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _spec = new DSAParameterSpec(*tmp);
+ }
+ else
+ throw InvalidParameterSpecException("expected a DSAParameterSpec");
+}
+
+void DSAParameters::engineInit(const byte*, size_t)
+{
+ throw "not implemented";
+}
+
+void DSAParameters::engineInit(const byte*, size_t, const String& format)
+{
+ throw "not implemented";
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAParameters.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DSAPARAMETERS_H
+#define _CLASS_DSAPARAMETERS_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/AlgorithmParametersSpi.h"
+using beecrypt::security::AlgorithmParametersSpi;
+#include "beecrypt/c++/security/spec/DSAParameterSpec.h"
+using beecrypt::security::spec::DSAParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DSAParameters : public AlgorithmParametersSpi
+ {
+ // friend class DSAParameterGenerator;
+
+ private:
+ DSAParameterSpec* _spec;
+
+ protected:
+ virtual AlgorithmParameterSpec* engineGetParameterSpec(const type_info&) throw (InvalidParameterSpecException);
+
+ virtual void engineInit(const AlgorithmParameterSpec&) throw (InvalidParameterSpecException);
+ virtual void engineInit(const byte*, size_t);
+ virtual void engineInit(const byte*, size_t, const String&);
+
+ public:
+ DSAParameters();
+ virtual ~DSAParameters();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/resource.h"
+#include "beecrypt/c++/provider/DSAPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+
+using namespace beecrypt::provider;
+
+DSAPrivateKeyImpl::DSAPrivateKeyImpl(const DSAPrivateKey& copy)
+{
+ _params = new DSAParameterSpec(copy.getParams());
+ _x = copy.getX();
+ _enc = 0;
+}
+
+DSAPrivateKeyImpl::DSAPrivateKeyImpl(const DSAParams& params, const mpnumber& x)
+{
+ _params = new DSAParameterSpec(params.getP(), params.getQ(), params.getG());
+ _x = x;
+ _enc = 0;
+}
+
+DSAPrivateKeyImpl::DSAPrivateKeyImpl(const dsaparam& params, const mpnumber& x)
+{
+ _params = new DSAParameterSpec(params.p, params.q, params.g);
+ _x = x;
+ _enc = 0;
+}
+
+DSAPrivateKeyImpl::DSAPrivateKeyImpl(const mpbarrett& p, const mpbarrett& q, const mpnumber& g, const mpnumber& x)
+{
+ _params = new DSAParameterSpec(p, q, g);
+ _x = x;
+ _enc = 0;
+}
+
+DSAPrivateKeyImpl::~DSAPrivateKeyImpl()
+{
+ delete _params;
+ _x.wipe();
+ if (_enc)
+ delete _enc;
+}
+
+DSAPrivateKey* DSAPrivateKeyImpl::clone() const
+{
+ return new DSAPrivateKeyImpl(*this);
+}
+
+const DSAParams& DSAPrivateKeyImpl::getParams() const throw ()
+{
+ return *_params;
+}
+
+const mpnumber& DSAPrivateKeyImpl::getX() const throw ()
+{
+ return _x;
+}
+
+const bytearray* DSAPrivateKeyImpl::getEncoded() const
+{
+ if (!_enc)
+ _enc = BeeKeyFactory::encode(*this);
+
+ return _enc;
+}
+
+const String& DSAPrivateKeyImpl::getAlgorithm() const throw ()
+{
+ static const String ALGORITHM = UNICODE_STRING_SIMPLE("DSA");
+ return ALGORITHM;
+}
+
+const String* DSAPrivateKeyImpl::getFormat() const throw ()
+{
+ static const String FORMAT = UNICODE_STRING_SIMPLE("BEE");
+ return &FORMAT;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAPrivateKeyImpl.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DSAPRIVATEKEYIMPL_H
+#define _CLASS_DSAPRIVATEKEYIMPL_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/interfaces/DSAPrivateKey.h"
+using beecrypt::security::interfaces::DSAPrivateKey;
+#include "beecrypt/c++/security/spec/DSAParameterSpec.h"
+using beecrypt::security::spec::DSAParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DSAPrivateKeyImpl : public DSAPrivateKey
+ {
+ private:
+ DSAParameterSpec* _params;
+ mpnumber _x;
+ mutable bytearray* _enc;
+
+ public:
+ DSAPrivateKeyImpl(const DSAPrivateKey&);
+ DSAPrivateKeyImpl(const DSAParams&, const mpnumber&);
+ DSAPrivateKeyImpl(const dsaparam&, const mpnumber&);
+ DSAPrivateKeyImpl(const mpbarrett&, const mpbarrett&, const mpnumber&, const mpnumber&);
+
+ virtual ~DSAPrivateKeyImpl();
+
+ virtual DSAPrivateKey* clone() const;
+
+ virtual const DSAParams& getParams() const throw ();
+ virtual const mpnumber& getX() const throw ();
+
+ virtual const bytearray* getEncoded() const;
+ virtual const String& getAlgorithm() const throw ();
+ virtual const String* getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/resource.h"
+#include "beecrypt/c++/provider/DSAPublicKeyImpl.h"
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+
+using namespace beecrypt::provider;
+
+DSAPublicKeyImpl::DSAPublicKeyImpl(const DSAPublicKey& copy)
+{
+ _params = new DSAParameterSpec(copy.getParams());
+ _y = copy.getY();
+ _enc = 0;
+}
+
+DSAPublicKeyImpl::DSAPublicKeyImpl(const DSAParams& params, const mpnumber& y)
+{
+ _params = new DSAParameterSpec(params.getP(), params.getQ(), params.getG());
+ _y = y;
+ _enc = 0;
+}
+
+DSAPublicKeyImpl::DSAPublicKeyImpl(const dsaparam& params, const mpnumber& y)
+{
+ _params = new DSAParameterSpec(params.p, params.q, params.g);
+ _y = y;
+ _enc = 0;
+}
+
+DSAPublicKeyImpl::DSAPublicKeyImpl(const mpbarrett& p, const mpbarrett& q, const mpnumber& g, const mpnumber& y)
+{
+ _params = new DSAParameterSpec(p, q, g);
+ _y = y;
+ _enc = 0;
+}
+
+DSAPublicKeyImpl::~DSAPublicKeyImpl()
+{
+ delete _params;
+ if (_enc)
+ delete _enc;
+}
+
+DSAPublicKey* DSAPublicKeyImpl::clone() const
+{
+ return new DSAPublicKeyImpl(*this);
+}
+
+const DSAParams& DSAPublicKeyImpl::getParams() const throw ()
+{
+ return *_params;
+}
+
+const mpnumber& DSAPublicKeyImpl::getY() const throw ()
+{
+ return _y;
+}
+
+const bytearray* DSAPublicKeyImpl::getEncoded() const
+{
+ if (!_enc)
+ _enc = BeeKeyFactory::encode(*this);
+
+ return _enc;
+}
+
+const String& DSAPublicKeyImpl::getAlgorithm() const throw ()
+{
+ static const String ALGORITHM = UNICODE_STRING_SIMPLE("DSA");
+ return ALGORITHM;
+}
+
+const String* DSAPublicKeyImpl::getFormat() const throw ()
+{
+ static const String FORMAT = UNICODE_STRING_SIMPLE("BEE");
+ return &FORMAT;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAPublicKeyImpl.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_DSAPUBLICKEYIMPL_H
+#define _CLASS_DSAPUBLICKEYIMPL_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/interfaces/DSAPublicKey.h"
+using beecrypt::security::interfaces::DSAPublicKey;
+#include "beecrypt/c++/security/spec/DSAParameterSpec.h"
+using beecrypt::security::spec::DSAParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class DSAPublicKeyImpl : public DSAPublicKey
+ {
+ private:
+ DSAParameterSpec* _params;
+ mpnumber _y;
+ mutable bytearray* _enc;
+
+ public:
+ DSAPublicKeyImpl(const DSAPublicKey&);
+ DSAPublicKeyImpl(const DSAParams&, const mpnumber&);
+ DSAPublicKeyImpl(const dsaparam&, const mpnumber&);
+ DSAPublicKeyImpl(const mpbarrett&, const mpbarrett&, const mpnumber&, const mpnumber&);
+ virtual ~DSAPublicKeyImpl();
+
+ virtual DSAPublicKey* clone() const;
+
+ virtual const DSAParams& getParams() const throw ();
+ virtual const mpnumber& getY() const throw ();
+
+ virtual const bytearray* getEncoded() const;
+ virtual const String& getAlgorithm() const throw ();
+ virtual const String* getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/pkcs12.h"
+
+#include "beecrypt/c++/crypto/interfaces/PBEKey.h"
+using beecrypt::crypto::interfaces::PBEKey;
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/provider/HMACMD5.h"
+
+using namespace beecrypt::provider;
+
+HMACMD5::HMACMD5() : _digest(16)
+{
+}
+
+HMACMD5::~HMACMD5()
+{
+}
+
+HMACMD5* HMACMD5::clone() const
+{
+ HMACMD5* result = new HMACMD5();
+
+ memcpy(&result->_param, &_param, sizeof(hmacmd5Param));
+
+ return result;
+}
+
+const bytearray& HMACMD5::engineDoFinal()
+{
+ hmacmd5Digest(&_param, _digest.data());
+
+ return _digest;
+}
+
+size_t HMACMD5::engineDoFinal(byte* data, size_t offset, size_t length) throw (ShortBufferException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ if (length < 16)
+ throw ShortBufferException();
+
+ hmacmd5Digest(&_param, data);
+
+ return 16;
+}
+
+size_t HMACMD5::engineGetMacLength()
+{
+ return 16;
+}
+
+void HMACMD5::engineReset()
+{
+ hmacmd5Reset(&_param);
+}
+
+void HMACMD5::engineUpdate(byte b)
+{
+ hmacmd5Update(&_param, &b, 1);
+}
+
+void HMACMD5::engineUpdate(const byte* data, size_t offset, size_t length)
+{
+ hmacmd5Update(&_param, data+offset, length);
+}
+
+void HMACMD5::engineInit(const Key& key, const AlgorithmParameterSpec* spec) throw (InvalidKeyException, InvalidAlgorithmParameterException)
+{
+ if (spec)
+ throw InvalidAlgorithmParameterException("No AlgorithmParameterSpec supported");
+
+ const PBEKey* pbe = dynamic_cast<const PBEKey*>(&key);
+ if (pbe)
+ {
+ byte _mac_key[16];
+ bytearray _rawk, _salt;
+ size_t _iter;
+
+ if (pbe->getEncoded())
+ _rawk = *(pbe->getEncoded());
+ else
+ throw InvalidKeyException("PBEKey must have an encoding");
+
+ if (pbe->getSalt())
+ _salt = *(pbe->getSalt());
+
+ _iter = pbe->getIterationCount();
+
+ if (pkcs12_derive_key(&md5, PKCS12_ID_MAC, _rawk.data(), _rawk.size(), _salt.data(), _salt.size(), _iter, _mac_key, 16))
+ throw InvalidKeyException("pkcs12_derive_key returned error");
+
+ hmacmd5Setup(&_param, _mac_key, 128);
+
+ return;
+ }
+
+ throw InvalidKeyException("Expected a PBEKey");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file HMACMD5.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_HMACMD5_H
+#define _CLASS_HMACMD5_H
+
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/hmacmd5.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/MacSpi.h"
+using beecrypt::crypto::MacSpi;
+
+namespace beecrypt {
+ namespace provider {
+ class HMACMD5 : public MacSpi
+ {
+ private:
+ hmacmd5Param _param;
+ bytearray _digest;
+
+ protected:
+ virtual const bytearray& engineDoFinal();
+ virtual size_t engineDoFinal(byte*, size_t, size_t) throw (ShortBufferException);
+ virtual size_t engineGetMacLength();
+ virtual void engineInit(const Key&, const AlgorithmParameterSpec* spec) throw (InvalidKeyException, InvalidAlgorithmParameterException);
+ virtual void engineReset();
+ virtual void engineUpdate(byte);
+ virtual void engineUpdate(const byte*, size_t, size_t);
+
+ public:
+ HMACMD5();
+ virtual ~HMACMD5();
+
+ virtual HMACMD5* clone() const;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/pkcs12.h"
+
+#include "beecrypt/c++/crypto/interfaces/PBEKey.h"
+using beecrypt::crypto::interfaces::PBEKey;
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/provider/HMACSHA1.h"
+
+using namespace beecrypt::provider;
+
+HMACSHA1::HMACSHA1() : _digest(20)
+{
+}
+
+HMACSHA1::~HMACSHA1()
+{
+}
+
+HMACSHA1* HMACSHA1::clone() const
+{
+ HMACSHA1* result = new HMACSHA1();
+
+ memcpy(&result->_param, &_param, sizeof(hmacsha1Param));
+
+ return result;
+}
+
+const bytearray& HMACSHA1::engineDoFinal()
+{
+ hmacsha1Digest(&_param, _digest.data());
+
+ return _digest;
+}
+
+size_t HMACSHA1::engineDoFinal(byte* data, size_t offset, size_t length) throw (ShortBufferException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ if (length < 20)
+ throw ShortBufferException();
+
+ hmacsha1Digest(&_param, data);
+
+ return 20;
+}
+
+size_t HMACSHA1::engineGetMacLength()
+{
+ return 20;
+}
+
+void HMACSHA1::engineReset()
+{
+ hmacsha1Reset(&_param);
+}
+
+void HMACSHA1::engineUpdate(byte b)
+{
+ hmacsha1Update(&_param, &b, 1);
+}
+
+void HMACSHA1::engineUpdate(const byte* data, size_t offset, size_t length)
+{
+ hmacsha1Update(&_param, data+offset, length);
+}
+
+void HMACSHA1::engineInit(const Key& key, const AlgorithmParameterSpec* spec) throw (InvalidKeyException, InvalidAlgorithmParameterException)
+{
+ if (spec)
+ throw InvalidAlgorithmParameterException("No AlgorithmParameterSpec supported");
+
+ const PBEKey* pbe = dynamic_cast<const PBEKey*>(&key);
+ if (pbe)
+ {
+ byte _mac_key[20];
+ bytearray _rawk, _salt;
+ size_t _iter;
+
+ if (pbe->getEncoded())
+ _rawk = *(pbe->getEncoded());
+ else
+ throw InvalidKeyException("PBEKey must have an encoding");
+
+ if (pbe->getSalt())
+ _salt = *(pbe->getSalt());
+
+ _iter = pbe->getIterationCount();
+
+ if (pkcs12_derive_key(&sha1, PKCS12_ID_MAC, _rawk.data(), _rawk.size(), _salt.data(), _salt.size(), _iter, _mac_key, 20))
+ throw InvalidKeyException("pkcs12_derive_key returned error");
+
+ hmacsha1Setup(&_param, _mac_key, 160);
+
+ return;
+ }
+
+ throw InvalidKeyException("Expected a PBEKey");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file HMACSHA1.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_HMACSHA1_H
+#define _CLASS_HMACSHA1_H
+
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/hmacsha1.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/MacSpi.h"
+using beecrypt::crypto::MacSpi;
+
+namespace beecrypt {
+ namespace provider {
+ class HMACSHA1 : public MacSpi
+ {
+ private:
+ hmacsha1Param _param;
+ bytearray _digest;
+
+ protected:
+ virtual const bytearray& engineDoFinal();
+ virtual size_t engineDoFinal(byte*, size_t, size_t) throw (ShortBufferException);
+ virtual size_t engineGetMacLength();
+ virtual void engineInit(const Key&, const AlgorithmParameterSpec* spec) throw (InvalidKeyException, InvalidAlgorithmParameterException);
+ virtual void engineReset();
+ virtual void engineUpdate(byte);
+ virtual void engineUpdate(const byte*, size_t, size_t);
+
+ public:
+ HMACSHA1();
+ virtual ~HMACSHA1();
+
+ virtual HMACSHA1* clone() const;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/pkcs12.h"
+
+#include "beecrypt/c++/crypto/interfaces/PBEKey.h"
+using beecrypt::crypto::interfaces::PBEKey;
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/provider/HMACSHA256.h"
+
+using namespace beecrypt::provider;
+
+HMACSHA256::HMACSHA256() : _digest(32)
+{
+}
+
+HMACSHA256::~HMACSHA256()
+{
+}
+
+HMACSHA256* HMACSHA256::clone() const
+{
+ HMACSHA256* result = new HMACSHA256();
+
+ memcpy(&result->_param, &_param, sizeof(hmacsha256Param));
+
+ return result;
+}
+
+const bytearray& HMACSHA256::engineDoFinal()
+{
+ hmacsha256Digest(&_param, _digest.data());
+
+ return _digest;
+}
+
+size_t HMACSHA256::engineDoFinal(byte* data, size_t offset, size_t length) throw (ShortBufferException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ if (length < 32)
+ throw ShortBufferException();
+
+ hmacsha256Digest(&_param, data);
+
+ return 32;
+}
+
+size_t HMACSHA256::engineGetMacLength()
+{
+ return 32;
+}
+
+void HMACSHA256::engineReset()
+{
+ hmacsha256Reset(&_param);
+}
+
+void HMACSHA256::engineUpdate(byte b)
+{
+ hmacsha256Update(&_param, &b, 1);
+}
+
+void HMACSHA256::engineUpdate(const byte* data, size_t offset, size_t length)
+{
+ hmacsha256Update(&_param, data+offset, length);
+}
+
+void HMACSHA256::engineInit(const Key& key, const AlgorithmParameterSpec* spec) throw (InvalidKeyException, InvalidAlgorithmParameterException)
+{
+ if (spec)
+ throw InvalidAlgorithmParameterException("No AlgorithmParameterSpec supported");
+
+ const PBEKey* pbe = dynamic_cast<const PBEKey*>(&key);
+ if (pbe)
+ {
+ byte _mac_key[32];
+ bytearray _rawk, _salt;
+ size_t _iter;
+
+ if (pbe->getEncoded())
+ _rawk = *(pbe->getEncoded());
+ else
+ throw InvalidKeyException("PBEKey must have an encoding");
+
+ if (pbe->getSalt())
+ _salt = *(pbe->getSalt());
+
+ _iter = pbe->getIterationCount();
+
+ if (pkcs12_derive_key(&sha256, PKCS12_ID_MAC, _rawk.data(), _rawk.size(), _salt.data(), _salt.size(), _iter, _mac_key, 32))
+ throw InvalidKeyException("pkcs12_derive_key returned error");
+
+ hmacsha256Setup(&_param, _mac_key, 256);
+
+ return;
+ }
+
+ throw InvalidKeyException("Expected a PBEKey");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file HMACSHA256.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_HMACSHA256_H
+#define _CLASS_HMACSHA256_H
+
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/hmacsha256.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/MacSpi.h"
+using beecrypt::crypto::MacSpi;
+
+namespace beecrypt {
+ namespace provider {
+ class HMACSHA256 : public MacSpi
+ {
+ private:
+ hmacsha256Param _param;
+ bytearray _digest;
+
+ protected:
+ virtual const bytearray& engineDoFinal();
+ virtual size_t engineDoFinal(byte*, size_t, size_t) throw (ShortBufferException);
+ virtual size_t engineGetMacLength();
+ virtual void engineInit(const Key&, const AlgorithmParameterSpec* spec) throw (InvalidKeyException, InvalidAlgorithmParameterException);
+ virtual void engineReset();
+ virtual void engineUpdate(byte);
+ virtual void engineUpdate(const byte*, size_t, size_t);
+
+ public:
+ HMACSHA256();
+ virtual ~HMACSHA256();
+
+ virtual HMACSHA256* clone() const;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/aes.h"
+#include "beecrypt/blockmode.h"
+#include "beecrypt/blockpad.h"
+#include "beecrypt/hmacsha256.h"
+#include "beecrypt/pkcs12.h"
+#include "beecrypt/sha256.h"
+#include "beecrypt/c++/provider/KeyProtector.h"
+#include "beecrypt/c++/beeyond/AnyEncodedKeySpec.h"
+using beecrypt::beeyond::AnyEncodedKeySpec;
+#include "beecrypt/c++/crypto/BadPaddingException.h"
+using beecrypt::crypto::BadPaddingException;
+#include "beecrypt/c++/io/ByteArrayInputStream.h"
+using beecrypt::io::ByteArrayInputStream;
+#include "beecrypt/c++/io/ByteArrayOutputStream.h"
+using beecrypt::io::ByteArrayOutputStream;
+#include "beecrypt/c++/io/DataInputStream.h"
+using beecrypt::io::DataInputStream;
+#include "beecrypt/c++/io/DataOutputStream.h"
+using beecrypt::io::DataOutputStream;
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+
+using namespace beecrypt::provider;
+
+namespace {
+ /* eventually these will be moved to a different location */
+ void pkcs5_pad(size_t blockbytes, bytearray& b)
+ {
+ size_t unpadded_size = b.size();
+
+ byte padvalue = blockbytes - (unpadded_size % blockbytes);
+
+ b.resize(unpadded_size + padvalue);
+
+ memset(b.data() + unpadded_size, padvalue, padvalue);
+ }
+
+ void pkcs5_unpad(size_t blockbytes, bytearray& b) throw (BadPaddingException)
+ {
+ byte padvalue = b[b.size() - 1];
+
+ if (padvalue > blockbytes)
+ throw BadPaddingException();
+
+ for (size_t i = (b.size() - padvalue); i < (b.size() - 1); i++)
+ if (b[i] != padvalue)
+ throw BadPaddingException();
+
+ b.resize(b.size() - padvalue);
+ }
+}
+
+KeyProtector::KeyProtector(PBEKey& key) throw (InvalidKeyException)
+{
+ bytearray _rawk, _salt;
+ size_t _iter;
+
+ if (key.getEncoded())
+ _rawk = *(key.getEncoded());
+ else
+ throw InvalidKeyException("PBEKey must have an encoding");
+
+ if (key.getSalt())
+ _salt = *(key.getSalt());
+
+ _iter = key.getIterationCount();
+
+ if (pkcs12_derive_key(&sha256, PKCS12_ID_CIPHER, _rawk.data(), _rawk.size(), _salt.data(), _salt.size(), _iter, _cipher_key, 32))
+ throw InvalidKeyException("pkcs12_derive_key returned error");
+
+ if (pkcs12_derive_key(&sha256, PKCS12_ID_MAC, _rawk.data(), _rawk.size(), _salt.data(), _salt.size(), _iter, _mac_key, 32))
+ throw InvalidKeyException("pkcs12_derive_key returned error");
+
+ if (pkcs12_derive_key(&sha256, PKCS12_ID_IV, _rawk.data(), _rawk.size(), _salt.data(), _salt.size(), _iter, _iv, 16))
+ throw InvalidKeyException("pkcs12_derive_key returned error");
+}
+
+KeyProtector::~KeyProtector() throw ()
+{
+ // wipe everything
+ memset(_cipher_key, 0, 32);
+ memset(_mac_key, 0, 32);
+ memset(_iv, 0, 16);
+}
+
+bytearray* KeyProtector::protect(const PrivateKey& pri) throw ()
+{
+ if (!pri.getEncoded())
+ return 0;
+
+ if (!pri.getFormat())
+ return 0;
+
+ /* Eventually we'll substitute this with the following construction:
+ * DataOutputStream(CipherOutputStream(ByteArrayOutputStream)))
+ */
+ ByteArrayOutputStream bos;
+ DataOutputStream dos(bos);
+
+ try
+ {
+ const bytearray* encoded_key = pri.getEncoded();
+
+ dos.writeUTF(pri.getAlgorithm());
+ dos.writeUTF(*pri.getFormat());
+ dos.writeInt(encoded_key->size());
+ dos.write(*encoded_key);
+ dos.close();
+
+ bytearray cleartext, ciphertext, mac(hmacsha256.digestsize);
+ bos.toByteArray(cleartext);
+
+ // Compute the MAC before padding
+ keyedHashFunctionContext mc(&hmacsha256);
+ keyedHashFunctionContextSetup(&mc, _mac_key, 256);
+ keyedHashFunctionContextUpdate(&mc, cleartext.data(), cleartext.size());
+ keyedHashFunctionContextDigest(&mc, mac.data());
+
+ // Pad the cleartext
+ pkcs5_pad(aes.blocksize, cleartext);
+
+ // Set the ciphertext size equal to the cleartext size
+ ciphertext.resize(cleartext.size());
+
+ // Encrypt the cleartext
+ blockCipherContext bc(&aes);
+ blockCipherContextSetup(&bc, _cipher_key, 256, ENCRYPT);
+ blockCipherContextSetIV(&bc, _iv);
+ blockCipherContextCBC(&bc, (uint32_t*) ciphertext.data(), (const uint32_t*) cleartext.data(), cleartext.size() / 16);
+
+ // Return the concatenation of the two bytearrays
+ return new bytearray(ciphertext + mac);
+ }
+ catch (IOException)
+ {
+ }
+
+ return 0;
+}
+
+PrivateKey* KeyProtector::recover(const byte* data, size_t size) throw (NoSuchAlgorithmException, UnrecoverableKeyException)
+{
+ // If we don't have at least enough data for the digest then bail out
+ if (size <= hmacsha256.digestsize)
+ throw UnrecoverableKeyException("encrypted key data way too short");
+
+ size_t ciphertext_size = size - hmacsha256.digestsize;
+
+ // Check if we have a whole number of blocks in the data
+ if ((ciphertext_size % aes.blocksize) != 0)
+ throw UnrecoverableKeyException("encrypted key data is not a whole number of blocks");
+
+ bytearray ciphertext(data, ciphertext_size), cleartext(ciphertext_size);
+
+ // Decrypt the ciphertext
+ blockCipherContext bc(&aes);
+ blockCipherContextSetup(&bc, _cipher_key, 256, DECRYPT);
+ blockCipherContextSetIV(&bc, _iv);
+ blockCipherContextCBC(&bc, (uint32_t*) cleartext.data(), (const uint32_t*) ciphertext.data(), ciphertext_size / 16);
+
+ try
+ {
+ pkcs5_unpad(aes.blocksize, cleartext);
+ }
+ catch (BadPaddingException)
+ {
+ // Corrupted data, most likely due to bad password
+ throw UnrecoverableKeyException("bad padding");
+ }
+
+ bytearray mac(hmacsha256.digestsize);
+
+ // Verify the MAC before recovering the key
+ keyedHashFunctionContext mc(&hmacsha256);
+ keyedHashFunctionContextSetup(&mc, _mac_key, 256);
+ keyedHashFunctionContextUpdate(&mc, cleartext.data(), cleartext.size());
+ keyedHashFunctionContextDigest(&mc, mac.data());
+
+ // Compare the two MACs and bail out if they're different
+ if (memcmp(data + ciphertext_size, mac.data(), hmacsha256.digestsize))
+ return 0;
+
+ // Now we're sure the password was correct, and we have the decrypted data
+
+ ByteArrayInputStream bis(cleartext);
+ DataInputStream dis(bis);
+
+ try
+ {
+ String algorithm, format;
+ bytearray enc;
+
+ dis.readUTF(algorithm);
+ dis.readUTF(format);
+
+ javaint encsize = dis.readInt();
+ if (encsize <= 0)
+ throw IOException();
+
+ enc.resize(encsize);
+
+ dis.readFully(enc);
+
+ AnyEncodedKeySpec spec(format, enc);
+ KeyFactory* kf;
+ PrivateKey* pri;
+
+ try
+ {
+ kf = KeyFactory::getInstance(algorithm);
+ pri = kf->generatePrivate(spec);
+
+ delete kf;
+
+ return pri;
+ }
+ catch (InvalidKeySpecException)
+ {
+ delete kf;
+ }
+ catch (NoSuchAlgorithmException)
+ {
+ }
+ }
+ catch (IOException)
+ {
+ }
+ throw UnrecoverableKeyException("parsing error in decrypted key");
+}
+
+PrivateKey* KeyProtector::recover(const bytearray& b) throw (NoSuchAlgorithmException, UnrecoverableKeyException)
+{
+ return recover(b.data(), b.size());
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _CLASS_KEYPROTECTOR_H
+#define _CLASS_KEYPROTECTOR_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/interfaces/PBEKey.h"
+using beecrypt::crypto::interfaces::PBEKey;
+#include "beecrypt/c++/security/PrivateKey.h"
+using beecrypt::security::PrivateKey;
+#include "beecrypt/c++/security/InvalidKeyException.h"
+using beecrypt::security::InvalidKeyException;
+#include "beecrypt/c++/security/UnrecoverableKeyException.h"
+using beecrypt::security::UnrecoverableKeyException;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+
+namespace beecrypt {
+ namespace provider {
+ class KeyProtector
+ {
+ private:
+ byte _cipher_key[32];
+ byte _mac_key[32];
+ byte _iv[16];
+
+ public:
+ KeyProtector(PBEKey&) throw (InvalidKeyException);
+ ~KeyProtector() throw ();
+
+ bytearray* protect(const PrivateKey&) throw ();
+
+ PrivateKey* recover(const bytearray&) throw (NoSuchAlgorithmException, UnrecoverableKeyException);
+ PrivateKey* recover(const byte*, size_t) throw (NoSuchAlgorithmException, UnrecoverableKeyException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/provider/MD5Digest.h"
+
+using namespace beecrypt::provider;
+
+MD5Digest::MD5Digest() : _digest(16)
+{
+ md5Reset(&_param);
+}
+
+MD5Digest::~MD5Digest()
+{
+}
+
+MD5Digest* MD5Digest::clone() const
+{
+ MD5Digest* result = new MD5Digest();
+
+ memcpy(&result->_param, &_param, sizeof(md5Param));
+
+ return result;
+}
+
+const bytearray& MD5Digest::engineDigest()
+{
+ md5Digest(&_param, _digest.data());
+
+ return _digest;
+}
+
+size_t MD5Digest::engineDigest(byte* data, size_t offset, size_t length) throw (ShortBufferException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ if (length < 16)
+ throw ShortBufferException();
+
+ md5Digest(&_param, data);
+
+ return 16;
+}
+
+size_t MD5Digest::engineGetDigestLength()
+{
+ return 16;
+}
+
+void MD5Digest::engineReset()
+{
+ md5Reset(&_param);
+}
+
+void MD5Digest::engineUpdate(byte b)
+{
+ md5Update(&_param, &b, 1);
+}
+
+void MD5Digest::engineUpdate(const byte* data, size_t offset, size_t length)
+{
+ md5Update(&_param, data+offset, length);
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file MD5Digest.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_MD5DIGEST_H
+#define _CLASS_MD5DIGEST_H
+
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/md5.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/MessageDigestSpi.h"
+using beecrypt::security::MessageDigestSpi;
+
+namespace beecrypt {
+ namespace provider {
+ class MD5Digest : public MessageDigestSpi
+ {
+ private:
+ md5Param _param;
+ bytearray _digest;
+
+ protected:
+ virtual const bytearray& engineDigest();
+ virtual size_t engineDigest(byte*, size_t, size_t) throw (ShortBufferException);
+ virtual size_t engineGetDigestLength();
+ virtual void engineReset();
+ virtual void engineUpdate(byte);
+ virtual void engineUpdate(const byte*, size_t, size_t);
+
+ public:
+ MD5Digest();
+ virtual ~MD5Digest();
+
+ virtual MD5Digest* clone() const;
+
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/MD5withRSASignature.h"
+
+#include "beecrypt/md5.h"
+
+using namespace beecrypt::provider;
+
+MD5withRSASignature::MD5withRSASignature() : PKCS1RSASignature(&md5)
+{
+}
+
+MD5withRSASignature::~MD5withRSASignature()
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file MD5withRSASignature.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_MD5WITHRSASIGNATURE_H
+#define _CLASS_MD5WITHRSASIGNATURE_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/provider/PKCS1RSASignature.h"
+
+namespace beecrypt {
+ namespace provider {
+ class MD5withRSASignature : public PKCS1RSASignature
+ {
+ public:
+ MD5withRSASignature();
+ ~MD5withRSASignature();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+LIBS = -licuuc -licuio
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+pkgaltlibdir=$(prefix)/lib@LIBALT@
+pkgaltlib_LTLIBRARIES = base.la
+
+base_la_SOURCES = \
+BeeCertificateFactory.cxx \
+BeeCryptProvider.cxx \
+BeeKeyFactory.cxx \
+BeeKeyStore.cxx \
+BeeSecureRandom.cxx \
+DHKeyFactory.cxx \
+DHKeyPairGenerator.cxx \
+DHParameterGenerator.cxx \
+DHParameters.cxx \
+DHPrivateKeyImpl.cxx \
+DHPublicKeyImpl.cxx \
+DSAKeyFactory.cxx \
+DSAKeyPairGenerator.cxx \
+DSAParameterGenerator.cxx \
+DSAParameters.cxx \
+DSAPrivateKeyImpl.cxx \
+DSAPublicKeyImpl.cxx \
+HMACMD5.cxx \
+HMACSHA1.cxx \
+HMACSHA256.cxx \
+KeyProtector.cxx \
+MD5Digest.cxx \
+MD5withRSASignature.cxx \
+PKCS1RSASignature.cxx \
+PKCS12KeyFactory.cxx \
+RSAKeyFactory.cxx \
+RSAKeyPairGenerator.cxx \
+RSAPrivateCrtKeyImpl.cxx \
+RSAPrivateKeyImpl.cxx \
+RSAPublicKeyImpl.cxx \
+SHA1Digest.cxx \
+SHA1withDSASignature.cxx \
+SHA1withRSASignature.cxx \
+SHA256withRSASignature.cxx
+
+base_la_LDFLAGS = -module
+base_la_LIBADD = $(top_builddir)/c++/libbeecrypt_cxx.la
+
+noinst_HEADERS = \
+BeeCertificateFactory.h \
+BeeCryptProvider.h \
+BeeKeyFactory.h \
+BeeKeyStore.h \
+BeeSecureRandom.h \
+DHKeyFactory.h \
+DHKeyPairGenerator.h \
+DHParameterGenerator.h \
+DHParameters.h \
+DHPrivateKeyImpl.h \
+DHPublicKeyImpl.h \
+DSAKeyFactory.h \
+DSAKeyPairGenerator.h \
+DSAParameterGenerator.h \
+DSAParameters.h \
+DSAPrivateKeyImpl.h \
+DSAPublicKeyImpl.h \
+HMACMD5.h \
+HMACSHA1.h \
+HMACSHA256.h \
+KeyProtector.h \
+MD5Digest.h \
+MD5withRSASignature.h \
+PKCS1RSASignature.h \
+PKCS12KeyFactory.h \
+RSAKeyFactory.h \
+RSAKeyPairGenerator.h \
+RSAPrivateCrtKeyImpl.h \
+RSAPrivateKeyImpl.h \
+RSAPublicKeyImpl.h \
+SHA1Digest.h \
+SHA1withDSASignature.h \
+SHA1withRSASignature.h \
+SHA256withRSASignature.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(base_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/provider
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(pkgaltlibdir)"
+pkgaltlibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkgaltlib_LTLIBRARIES)
+base_la_DEPENDENCIES = $(top_builddir)/c++/libbeecrypt_cxx.la
+am_base_la_OBJECTS = BeeCertificateFactory.lo BeeCryptProvider.lo \
+ BeeKeyFactory.lo BeeKeyStore.lo BeeSecureRandom.lo \
+ DHKeyFactory.lo DHKeyPairGenerator.lo DHParameterGenerator.lo \
+ DHParameters.lo DHPrivateKeyImpl.lo DHPublicKeyImpl.lo \
+ DSAKeyFactory.lo DSAKeyPairGenerator.lo \
+ DSAParameterGenerator.lo DSAParameters.lo DSAPrivateKeyImpl.lo \
+ DSAPublicKeyImpl.lo HMACMD5.lo HMACSHA1.lo HMACSHA256.lo \
+ KeyProtector.lo MD5Digest.lo MD5withRSASignature.lo \
+ PKCS1RSASignature.lo PKCS12KeyFactory.lo RSAKeyFactory.lo \
+ RSAKeyPairGenerator.lo RSAPrivateCrtKeyImpl.lo \
+ RSAPrivateKeyImpl.lo RSAPublicKeyImpl.lo SHA1Digest.lo \
+ SHA1withDSASignature.lo SHA1withRSASignature.lo \
+ SHA256withRSASignature.lo
+base_la_OBJECTS = $(am_base_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(base_la_SOURCES)
+DIST_SOURCES = $(base_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = -licuuc -licuio
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+pkgaltlibdir = $(prefix)/lib@LIBALT@
+pkgaltlib_LTLIBRARIES = base.la
+base_la_SOURCES = \
+BeeCertificateFactory.cxx \
+BeeCryptProvider.cxx \
+BeeKeyFactory.cxx \
+BeeKeyStore.cxx \
+BeeSecureRandom.cxx \
+DHKeyFactory.cxx \
+DHKeyPairGenerator.cxx \
+DHParameterGenerator.cxx \
+DHParameters.cxx \
+DHPrivateKeyImpl.cxx \
+DHPublicKeyImpl.cxx \
+DSAKeyFactory.cxx \
+DSAKeyPairGenerator.cxx \
+DSAParameterGenerator.cxx \
+DSAParameters.cxx \
+DSAPrivateKeyImpl.cxx \
+DSAPublicKeyImpl.cxx \
+HMACMD5.cxx \
+HMACSHA1.cxx \
+HMACSHA256.cxx \
+KeyProtector.cxx \
+MD5Digest.cxx \
+MD5withRSASignature.cxx \
+PKCS1RSASignature.cxx \
+PKCS12KeyFactory.cxx \
+RSAKeyFactory.cxx \
+RSAKeyPairGenerator.cxx \
+RSAPrivateCrtKeyImpl.cxx \
+RSAPrivateKeyImpl.cxx \
+RSAPublicKeyImpl.cxx \
+SHA1Digest.cxx \
+SHA1withDSASignature.cxx \
+SHA1withRSASignature.cxx \
+SHA256withRSASignature.cxx
+
+base_la_LDFLAGS = -module
+base_la_LIBADD = $(top_builddir)/c++/libbeecrypt_cxx.la
+noinst_HEADERS = \
+BeeCertificateFactory.h \
+BeeCryptProvider.h \
+BeeKeyFactory.h \
+BeeKeyStore.h \
+BeeSecureRandom.h \
+DHKeyFactory.h \
+DHKeyPairGenerator.h \
+DHParameterGenerator.h \
+DHParameters.h \
+DHPrivateKeyImpl.h \
+DHPublicKeyImpl.h \
+DSAKeyFactory.h \
+DSAKeyPairGenerator.h \
+DSAParameterGenerator.h \
+DSAParameters.h \
+DSAPrivateKeyImpl.h \
+DSAPublicKeyImpl.h \
+HMACMD5.h \
+HMACSHA1.h \
+HMACSHA256.h \
+KeyProtector.h \
+MD5Digest.h \
+MD5withRSASignature.h \
+PKCS1RSASignature.h \
+PKCS12KeyFactory.h \
+RSAKeyFactory.h \
+RSAKeyPairGenerator.h \
+RSAPrivateCrtKeyImpl.h \
+RSAPrivateKeyImpl.h \
+RSAPublicKeyImpl.h \
+SHA1Digest.h \
+SHA1withDSASignature.h \
+SHA1withRSASignature.h \
+SHA256withRSASignature.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/provider/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/provider/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-pkgaltlibLTLIBRARIES: $(pkgaltlib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgaltlibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgaltlibdir)"
+ @list='$(pkgaltlib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(LIBTOOL) --mode=install $(pkgaltlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkgaltlibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(pkgaltlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkgaltlibdir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-pkgaltlibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgaltlib_LTLIBRARIES)'; for p in $$list; do \
+ p="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(pkgaltlibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(pkgaltlibdir)/$$p"; \
+ done
+
+clean-pkgaltlibLTLIBRARIES:
+ -test -z "$(pkgaltlib_LTLIBRARIES)" || rm -f $(pkgaltlib_LTLIBRARIES)
+ @list='$(pkgaltlib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+base.la: $(base_la_OBJECTS) $(base_la_DEPENDENCIES)
+ $(CXXLINK) -rpath $(pkgaltlibdir) $(base_la_LDFLAGS) $(base_la_OBJECTS) $(base_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgaltlibdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkgaltlibLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgaltlibLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-pkgaltlibLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-pkgaltlibLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-pkgaltlibLTLIBRARIES install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am \
+ uninstall-pkgaltlibLTLIBRARIES
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/beeyond/PKCS12PBEKey.h"
+using beecrypt::beeyond::PKCS12PBEKey;
+#include "beecrypt/c++/crypto/spec/PBEKeySpec.h"
+using beecrypt::crypto::spec::PBEKeySpec;
+#include "beecrypt/c++/provider/PKCS12KeyFactory.h"
+
+using namespace beecrypt::provider;
+
+PKCS12KeyFactory::PKCS12KeyFactory()
+{
+}
+
+PKCS12KeyFactory::~PKCS12KeyFactory()
+{
+}
+
+SecretKey* PKCS12KeyFactory::engineGenerateSecret(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const PBEKeySpec* pbe = dynamic_cast<const PBEKeySpec*>(&spec);
+ if (pbe)
+ {
+ return new PKCS12PBEKey(pbe->getPassword(), pbe->getSalt(), pbe->getIterationCount());
+ }
+ throw InvalidKeySpecException("Expected a PBEKeySpec");
+}
+
+KeySpec* PKCS12KeyFactory::engineGetKeySpec(const SecretKey& key, const type_info& info) throw (InvalidKeySpecException)
+{
+ const PBEKey* pbe = dynamic_cast<const PBEKey*>(&key);
+ if (pbe)
+ {
+ if (info == typeid(KeySpec) || info == typeid(PBEKeySpec))
+ {
+ return new PBEKeySpec(&pbe->getPassword(), pbe->getSalt(), pbe->getIterationCount(), 0);
+ }
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+ }
+ throw InvalidKeySpecException("Unsupported SecretKey type");
+}
+
+SecretKey* PKCS12KeyFactory::engineTranslateKey(const SecretKey& key) throw (InvalidKeyException)
+{
+ const PBEKey* pbe = dynamic_cast<const PBEKey*>(&key);
+ if (pbe)
+ {
+ return new PKCS12PBEKey(pbe->getPassword(), pbe->getSalt(), pbe->getIterationCount());
+ }
+ throw InvalidKeyException("Unsupported SecretKey type");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PKCS12KeyFactory.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_PKCS12KEYFACTORY_H
+#define _CLASS_PKCS12KEYFACTORY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/crypto/SecretKeyFactorySpi.h"
+using beecrypt::crypto::SecretKeyFactorySpi;
+
+namespace beecrypt {
+ namespace provider {
+ class PKCS12KeyFactory : public SecretKeyFactorySpi
+ {
+ protected:
+ virtual SecretKey* engineGenerateSecret(const KeySpec&) throw (InvalidKeySpecException);
+ virtual KeySpec* engineGetKeySpec(const SecretKey&, const type_info&) throw (InvalidKeySpecException);
+ virtual SecretKey* engineTranslateKey(const SecretKey&) throw (InvalidKeyException);
+
+ public:
+ PKCS12KeyFactory();
+ virtual ~PKCS12KeyFactory();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/provider/PKCS1RSASignature.h"
+#include "beecrypt/c++/security/interfaces/RSAPrivateKey.h"
+using beecrypt::security::interfaces::RSAPrivateKey;
+#include "beecrypt/c++/security/interfaces/RSAPrivateCrtKey.h"
+using beecrypt::security::interfaces::RSAPrivateCrtKey;
+#include "beecrypt/c++/security/interfaces/RSAPublicKey.h"
+using beecrypt::security::interfaces::RSAPublicKey;
+
+#include "beecrypt/pkcs1.h"
+
+using namespace beecrypt::provider;
+
+PKCS1RSASignature::PKCS1RSASignature(const hashFunction* hf) : _hfc(hf)
+{
+}
+
+PKCS1RSASignature::~PKCS1RSASignature()
+{
+}
+
+AlgorithmParameters* PKCS1RSASignature::engineGetParameters() const
+{
+ return 0;
+}
+
+void PKCS1RSASignature::engineSetParameter(const AlgorithmParameterSpec& spec) throw (InvalidAlgorithmParameterException)
+{
+ throw InvalidAlgorithmParameterException("unsupported for this algorithm");
+}
+
+void PKCS1RSASignature::engineInitSign(const PrivateKey& key, SecureRandom* random) throw (InvalidKeyException)
+{
+ const RSAPrivateKey* rsa = dynamic_cast<const RSAPrivateKey*>(&key);
+
+ if (rsa)
+ {
+ /* copy key information */
+ _pair.n = rsa->getModulus();
+ _pair.d = rsa->getPrivateExponent();
+
+ const RSAPrivateCrtKey* crt = dynamic_cast<const RSAPrivateCrtKey*>(rsa);
+
+ if (crt)
+ {
+ _pair.p = crt->getPrimeP();
+ _pair.q = crt->getPrimeQ();
+ _pair.dp = crt->getPrimeExponentP();
+ _pair.dq = crt->getPrimeExponentQ();
+ _pair.qi = crt->getCrtCoefficient();
+ _crt = true;
+ }
+ else
+ _crt = false;
+
+ /* reset the hash function */
+ hashFunctionContextReset(&_hfc);
+
+ _srng = random;
+ }
+ else
+ throw InvalidKeyException("key must be a RSAPrivateKey");
+}
+
+void PKCS1RSASignature::engineInitVerify(const PublicKey& key) throw (InvalidKeyException)
+{
+ const RSAPublicKey* rsa = dynamic_cast<const RSAPublicKey*>(&key);
+
+ if (rsa)
+ {
+ /* copy key information */
+ _pair.n = rsa->getModulus();
+ _pair.e = rsa->getPublicExponent();
+
+ /* reset the hash function */
+ hashFunctionContextReset(&_hfc);
+
+ _srng = 0;
+ }
+ else
+ throw InvalidKeyException("key must be a RSAPrivateKey");
+}
+
+void PKCS1RSASignature::engineUpdate(byte b)
+{
+ hashFunctionContextUpdate(&_hfc, &b, 1);
+}
+
+void PKCS1RSASignature::engineUpdate(const byte* data, size_t offset, size_t len)
+{
+ hashFunctionContextUpdate(&_hfc, data+offset, len);
+}
+
+bytearray* PKCS1RSASignature::engineSign() throw (SignatureException)
+{
+ size_t sigsize = (_pair.n.bitlength()+7) >> 3;
+
+ bytearray* signature = new bytearray(sigsize);
+
+ engineSign(signature->data(), 0, signature->size());
+
+ return signature;
+}
+
+size_t PKCS1RSASignature::engineSign(byte* signature, size_t offset, size_t len) throw (ShortBufferException, SignatureException)
+{
+ if (!signature)
+ throw NullPointerException();
+
+ size_t sigsize = (_pair.n.bitlength()+7) >> 3;
+
+ /* test if we have enough space in output buffer */
+ if (sigsize > (len - offset))
+ throw ShortBufferException();
+
+ /* okay, we can continue */
+ mpnumber c, m;
+ bytearray em(sigsize);
+
+ if (pkcs1_emsa_encode_digest(&_hfc, em.data(), sigsize))
+ throw SignatureException("internal error in emsa_pkcs1_encode_digest");
+
+ mpnsetbin(&c, em.data(), sigsize);
+
+ if (_crt)
+ {
+ if (rsapricrt(&_pair.n, &_pair.p, &_pair.q, &_pair.dp, &_pair.dq, &_pair.qi, &c, &m))
+ throw SignatureException("internal error in rsapricrt function");
+ }
+ else
+ {
+ if (rsapri(&_pair.n, &_pair.d, &c, &m))
+ throw SignatureException("internal error in rsapri function");
+ }
+
+ if (i2osp(signature+offset, sigsize, m.data, m.size))
+ throw SignatureException("internal error in i2osp");
+
+ return sigsize;
+}
+
+size_t PKCS1RSASignature::engineSign(bytearray& signature) throw (SignatureException)
+{
+ size_t sigsize = (_pair.n.bitlength()+7) >> 3;
+
+ signature.resize(sigsize);
+
+ return engineSign(signature.data(), 0, signature.size());
+}
+
+bool PKCS1RSASignature::engineVerify(const byte* signature, size_t offset, size_t len) throw (SignatureException)
+{
+ if (!signature)
+ throw NullPointerException();
+
+ size_t sigsize = (_pair.n.bitlength()+7) >> 3;
+
+ /* test if we have enough data in signature */
+ if (sigsize > (len - offset))
+ return false;
+
+ /* okay, we can continue */
+ mpnumber c, m;
+ bytearray em(sigsize);
+
+ if (pkcs1_emsa_encode_digest(&_hfc, em.data(), sigsize))
+ throw SignatureException("internal error in emsa_pkcs1_encode_digest");
+
+ mpnsetbin(&c, em.data(), sigsize);
+ mpnsetbin(&m, signature+offset, sigsize);
+
+ return rsavrfy(&_pair.n, &_pair.e, &m, &c);
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PKCS1RSASignature.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_PKCS1RSASIGNATURE_H
+#define _CLASS_PKCS1RSASIGNATURE_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/rsa.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/SignatureSpi.h"
+using beecrypt::security::SecureRandom;
+using beecrypt::security::SignatureSpi;
+using beecrypt::security::AlgorithmParameters;
+using beecrypt::security::InvalidAlgorithmParameterException;
+using beecrypt::security::InvalidKeyException;
+using beecrypt::security::PrivateKey;
+using beecrypt::security::PublicKey;
+using beecrypt::security::ShortBufferException;
+using beecrypt::security::SignatureException;
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class PKCS1RSASignature : public SignatureSpi
+ {
+ private:
+ rsakp _pair;
+ bool _crt;
+ hashFunctionContext _hfc;
+ SecureRandom* _srng;
+
+ protected:
+ PKCS1RSASignature(const hashFunction*);
+
+ virtual AlgorithmParameters* engineGetParameters() const;
+ virtual void engineSetParameter(const AlgorithmParameterSpec&) throw (InvalidAlgorithmParameterException);
+
+ virtual void engineInitSign(const PrivateKey&, SecureRandom*) throw (InvalidKeyException);
+ virtual void engineInitVerify(const PublicKey&) throw (InvalidKeyException);
+
+ virtual bytearray* engineSign() throw (SignatureException);
+ virtual size_t engineSign(byte*, size_t, size_t) throw (ShortBufferException, SignatureException);
+ virtual size_t engineSign(bytearray&) throw (SignatureException);
+ virtual bool engineVerify(const byte*, size_t, size_t) throw (SignatureException);
+
+ virtual void engineUpdate(byte);
+ virtual void engineUpdate(const byte*, size_t, size_t);
+
+ public:
+ virtual ~PKCS1RSASignature();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/RSAKeyFactory.h"
+#include "beecrypt/c++/provider/RSAPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/RSAPrivateCrtKeyImpl.h"
+#include "beecrypt/c++/provider/RSAPublicKeyImpl.h"
+#include "beecrypt/c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+#include "beecrypt/c++/security/spec/EncodedKeySpec.h"
+using beecrypt::security::spec::EncodedKeySpec;
+#include "beecrypt/c++/security/spec/RSAPrivateKeySpec.h"
+using beecrypt::security::spec::RSAPrivateKeySpec;
+#include "beecrypt/c++/security/spec/RSAPrivateCrtKeySpec.h"
+using beecrypt::security::spec::RSAPrivateCrtKeySpec;
+#include "beecrypt/c++/security/spec/RSAPublicKeySpec.h"
+using beecrypt::security::spec::RSAPublicKeySpec;
+
+using beecrypt::security::NoSuchAlgorithmException;
+
+using namespace beecrypt::provider;
+
+RSAKeyFactory::RSAKeyFactory()
+{
+}
+
+RSAKeyFactory::~RSAKeyFactory()
+{
+}
+
+PrivateKey* RSAKeyFactory::engineGeneratePrivate(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const RSAPrivateKeySpec* rsa = dynamic_cast<const RSAPrivateKeySpec*>(&spec);
+ if (rsa)
+ {
+ const RSAPrivateCrtKeySpec* crt = dynamic_cast<const RSAPrivateCrtKeySpec*>(rsa);
+ if (crt)
+ return new RSAPrivateCrtKeyImpl(crt->getModulus(), crt->getPublicExponent(), crt->getPrivateExponent(), crt->getPrimeP(), crt->getPrimeQ(), crt->getPrimeExponentP(), crt->getPrimeExponentQ(), crt->getCrtCoefficient());
+ else
+ return new RSAPrivateKeyImpl(rsa->getModulus(), rsa->getPrivateExponent());
+ }
+
+ const EncodedKeySpec* enc = dynamic_cast<const EncodedKeySpec*>(&spec);
+ if (enc)
+ {
+ try
+ {
+ KeyFactory* kf = KeyFactory::getInstance(enc->getFormat());
+ try
+ {
+ PrivateKey* pri = kf->generatePrivate(*enc);
+ delete kf;
+ return pri;
+ }
+ catch (...)
+ {
+ delete kf;
+ throw;
+ }
+ }
+ catch (NoSuchAlgorithmException)
+ {
+ throw InvalidKeySpecException("Unsupported KeySpec encoding format");
+ }
+ }
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+}
+
+PublicKey* RSAKeyFactory::engineGeneratePublic(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ const RSAPublicKeySpec* rsa = dynamic_cast<const RSAPublicKeySpec*>(&spec);
+
+ if (rsa)
+ {
+ return new RSAPublicKeyImpl(rsa->getModulus(), rsa->getPublicExponent());
+ }
+
+ const EncodedKeySpec* enc = dynamic_cast<const EncodedKeySpec*>(&spec);
+ if (enc)
+ {
+ try
+ {
+ KeyFactory* kf = KeyFactory::getInstance(enc->getFormat());
+ try
+ {
+ PublicKey* pub = kf->generatePublic(*enc);
+ delete kf;
+ return pub;
+ }
+ catch (...)
+ {
+ delete kf;
+ throw;
+ }
+ }
+ catch (NoSuchAlgorithmException)
+ {
+ throw InvalidKeySpecException("Unsupported KeySpec encoding format");
+ }
+ }
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+}
+
+KeySpec* RSAKeyFactory::engineGetKeySpec(const Key& key, const type_info& info) throw (InvalidKeySpecException)
+{
+ const RSAPublicKey* pub = dynamic_cast<const RSAPublicKey*>(&key);
+
+ if (pub)
+ {
+ if (info == typeid(KeySpec) || info == typeid(RSAPublicKeySpec))
+ {
+ return new RSAPublicKeySpec(pub->getModulus(), pub->getPublicExponent());
+ }
+ /* todo:
+ if (info == typeid(EncodedKeySpec))
+ {
+ }
+ */
+
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+ }
+
+ const RSAPrivateKey* pri = dynamic_cast<const RSAPrivateKey*>(&key);
+
+ if (pri)
+ {
+ const RSAPrivateCrtKey* crt = dynamic_cast<const RSAPrivateCrtKey*>(pri);
+
+ if (crt)
+ {
+ if (info == typeid(KeySpec) || info == typeid(RSAPrivateCrtKeySpec))
+ {
+ return new RSAPrivateCrtKeySpec(crt->getModulus(), crt->getPublicExponent(), crt->getPrivateExponent(), crt->getPrimeP(), crt->getPrimeQ(), crt->getPrimeExponentP(), crt->getPrimeExponentQ(), crt->getCrtCoefficient());
+ }
+ /* todo:
+ if (info == typeid(EncodedKeySpec))
+ {
+ }
+ */
+ }
+ else
+ {
+ if (info == typeid(KeySpec) || info == typeid(RSAPrivateKeySpec))
+ {
+ return new RSAPrivateKeySpec(pri->getModulus(), pri->getPrivateExponent());
+ }
+ /* todo:
+ if (info == typeid(EncodedKeySpec))
+ {
+ }
+ */
+ }
+
+ throw InvalidKeySpecException("Unsupported KeySpec type");
+ }
+
+ throw InvalidKeySpecException("Unsupported Key type");
+}
+
+Key* RSAKeyFactory::engineTranslateKey(const Key& key) throw (InvalidKeyException)
+{
+ const RSAPublicKey* pub = dynamic_cast<const RSAPublicKey*>(&key);
+ if (pub)
+ return new RSAPublicKeyImpl(*pub);
+
+ const RSAPrivateKey* pri = dynamic_cast<const RSAPrivateKey*>(&key);
+ if (pri)
+ {
+ const RSAPrivateCrtKey* crt = dynamic_cast<const RSAPrivateCrtKey*>(pri);
+ if (crt)
+ return new RSAPrivateCrtKeyImpl(*crt);
+ else
+ return new RSAPrivateKeyImpl(*pri);
+ }
+
+ throw InvalidKeyException("Unsupported Key type");
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAKeyFactory.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_RSAKEYFACTORY_H
+#define _CLASS_RSAKEYFACTORY_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyFactorySpi.h"
+using beecrypt::security::InvalidKeyException;
+using beecrypt::security::Key;
+using beecrypt::security::KeyFactorySpi;
+using beecrypt::security::PrivateKey;
+using beecrypt::security::PublicKey;
+using beecrypt::security::spec::InvalidKeySpecException;
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace provider {
+ class RSAKeyFactory : public KeyFactorySpi
+ {
+ friend class BeeCryptProvider;
+
+ protected:
+ virtual PrivateKey* engineGeneratePrivate(const KeySpec&) throw (InvalidKeySpecException);
+ virtual PublicKey* engineGeneratePublic(const KeySpec&) throw (InvalidKeySpecException);
+
+ virtual KeySpec* engineGetKeySpec(const Key&, const type_info&) throw (InvalidKeySpecException);
+
+ virtual Key* engineTranslateKey(const Key&) throw (InvalidKeyException);
+
+ public:
+ RSAKeyFactory();
+ virtual ~RSAKeyFactory();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/adapter.h"
+using beecrypt::randomGeneratorContextAdapter;
+#include "beecrypt/c++/provider/BeeCryptProvider.h"
+#include "beecrypt/c++/provider/RSAKeyPairGenerator.h"
+#include "beecrypt/c++/provider/RSAPublicKeyImpl.h"
+#include "beecrypt/c++/provider/RSAPrivateCrtKeyImpl.h"
+
+#include "beecrypt/rsakp.h"
+
+using namespace beecrypt::provider;
+
+RSAKeyPairGenerator::RSAKeyPairGenerator()
+{
+ _size = 0;
+ _spec = 0;
+ _srng = 0;
+}
+
+RSAKeyPairGenerator::~RSAKeyPairGenerator()
+{
+ _size = 0;
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _srng = 0;
+}
+
+KeyPair* RSAKeyPairGenerator::genpair(randomGeneratorContext* rngc)
+{
+ rsakp _pair;
+
+ if (rsakpMake(&_pair, rngc, _spec ? _spec->getKeysize() : (_size ? _size : 1024)))
+ throw "unexpected error in rsakpMake";
+
+ return new KeyPair(new RSAPublicKeyImpl(_pair.n, _pair.e), new RSAPrivateCrtKeyImpl(_pair.n, _pair.e, _pair.d, _pair.p, _pair.q, _pair.dp, _pair.dq, _pair.qi));
+}
+
+KeyPair* RSAKeyPairGenerator::engineGenerateKeyPair()
+{
+ if (_srng)
+ {
+ randomGeneratorContextAdapter rngc(_srng);
+
+ return genpair(&rngc);
+ }
+ else
+ {
+ randomGeneratorContext rngc(randomGeneratorDefault());
+
+ return genpair(&rngc);
+ }
+}
+
+void RSAKeyPairGenerator::engineInitialize(const AlgorithmParameterSpec& spec, SecureRandom* random) throw (InvalidAlgorithmParameterException)
+{
+ const RSAKeyGenParameterSpec* rsaspec = dynamic_cast<const RSAKeyGenParameterSpec*>(&spec);
+
+ if (rsaspec)
+ {
+ if (_spec)
+ delete _spec;
+
+ _spec = new RSAKeyGenParameterSpec(rsaspec->getKeysize(), rsaspec->getPublicExponent());
+ }
+ else
+ throw InvalidAlgorithmParameterException("not an RSAKeyGenParameterSpec");
+}
+
+void RSAKeyPairGenerator::engineInitialize(size_t keysize, SecureRandom* random) throw (InvalidParameterException)
+{
+ if (keysize < 512)
+ throw InvalidParameterException("Modulus size must be at least 512 bits");
+
+ _size = keysize;
+ if (_spec)
+ {
+ delete _spec;
+ _spec = 0;
+ }
+ _srng = random;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAKeyPairGenerator.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_RSAKEYPAIRGENERATOR_H
+#define _CLASS_RSAKEYPAIRGENERATOR_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyPairGeneratorSpi.h"
+using beecrypt::security::KeyPairGeneratorSpi;
+using beecrypt::security::KeyPair;
+#include "beecrypt/c++/security/SecureRandom.h"
+using beecrypt::security::SecureRandom;
+#include "beecrypt/c++/security/spec/RSAKeyGenParameterSpec.h"
+using beecrypt::security::spec::RSAKeyGenParameterSpec;
+
+using beecrypt::security::InvalidAlgorithmParameterException;
+using beecrypt::security::InvalidParameterException;
+
+namespace beecrypt {
+ namespace provider {
+ class RSAKeyPairGenerator : public KeyPairGeneratorSpi
+ {
+ private:
+ size_t _size;
+ RSAKeyGenParameterSpec* _spec;
+ SecureRandom* _srng;
+
+ KeyPair* genpair(randomGeneratorContext*);
+
+ protected:
+ virtual KeyPair* engineGenerateKeyPair();
+
+ virtual void engineInitialize(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException);
+ virtual void engineInitialize(size_t, SecureRandom*) throw (InvalidParameterException);
+
+ public:
+ RSAKeyPairGenerator();
+ virtual ~RSAKeyPairGenerator();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/RSAPrivateCrtKeyImpl.h"
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+
+using namespace beecrypt::provider;
+
+RSAPrivateCrtKeyImpl::RSAPrivateCrtKeyImpl(const RSAPrivateCrtKey& copy)
+{
+ _n = copy.getModulus();
+ _e = copy.getPublicExponent();
+ _d = copy.getPrivateExponent();
+ _p = copy.getPrimeP();
+ _q = copy.getPrimeQ();
+ _dp = copy.getPrimeExponentP();
+ _dq = copy.getPrimeExponentQ();
+ _qi = copy.getCrtCoefficient();
+ _enc = 0;
+}
+
+RSAPrivateCrtKeyImpl::RSAPrivateCrtKeyImpl(const mpbarrett& n, const mpnumber& e, const mpnumber& d, const mpbarrett& p, const mpbarrett& q, const mpnumber& dp, const mpnumber& dq, const mpnumber& qi)
+{
+ _n = n;
+ _e = e;
+ _d = d;
+ _p = p;
+ _q = q;
+ _dp = dp;
+ _dq = dq;
+ _qi = qi;
+ _enc = 0;
+}
+
+RSAPrivateCrtKeyImpl::~RSAPrivateCrtKeyImpl()
+{
+ _d.wipe();
+ _p.wipe();
+ _q.wipe();
+ _dp.wipe();
+ _dq.wipe();
+ _qi.wipe();
+ if (_enc)
+ delete _enc;
+}
+
+RSAPrivateCrtKey* RSAPrivateCrtKeyImpl::clone() const
+{
+ return new RSAPrivateCrtKeyImpl(*this);
+}
+
+const mpbarrett& RSAPrivateCrtKeyImpl::getModulus() const throw ()
+{
+ return _n;
+}
+
+const mpnumber& RSAPrivateCrtKeyImpl::getPrivateExponent() const throw ()
+{
+ return _d;
+}
+
+const mpnumber& RSAPrivateCrtKeyImpl::getPublicExponent() const throw ()
+{
+ return _e;
+}
+
+const mpbarrett& RSAPrivateCrtKeyImpl::getPrimeP() const throw ()
+{
+ return _p;
+}
+
+const mpbarrett& RSAPrivateCrtKeyImpl::getPrimeQ() const throw ()
+{
+ return _q;
+}
+
+const mpnumber& RSAPrivateCrtKeyImpl::getPrimeExponentP() const throw ()
+{
+ return _dp;
+}
+
+const mpnumber& RSAPrivateCrtKeyImpl::getPrimeExponentQ() const throw ()
+{
+ return _dq;
+}
+
+const mpnumber& RSAPrivateCrtKeyImpl::getCrtCoefficient() const throw ()
+{
+ return _qi;
+}
+
+const bytearray* RSAPrivateCrtKeyImpl::getEncoded() const
+{
+ if (!_enc)
+ _enc = BeeKeyFactory::encode(*this);
+
+ return _enc;
+}
+
+const String& RSAPrivateCrtKeyImpl::getAlgorithm() const throw ()
+{
+ static const String ALGORITHM = UNICODE_STRING_SIMPLE("RSA");
+ return ALGORITHM;
+}
+
+const String* RSAPrivateCrtKeyImpl::getFormat() const throw ()
+{
+ static const String FORMAT = UNICODE_STRING_SIMPLE("BEE");
+ return &FORMAT;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPrivateCrtKeyImpl.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_RSAPRIVATECRTKEYIMPL_H
+#define _CLASS_RSAPRIVATECRTKEYIMPL_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/interfaces/RSAPrivateCrtKey.h"
+using beecrypt::security::interfaces::RSAPrivateCrtKey;
+
+namespace beecrypt {
+ namespace provider {
+ class RSAPrivateCrtKeyImpl : public RSAPrivateCrtKey
+ {
+ private:
+ mpbarrett _n;
+ mpnumber _e;
+ mpnumber _d;
+ mpbarrett _p;
+ mpbarrett _q;
+ mpnumber _dp;
+ mpnumber _dq;
+ mpnumber _qi;
+ mutable bytearray* _enc;
+
+ public:
+ RSAPrivateCrtKeyImpl(const RSAPrivateCrtKey&);
+ RSAPrivateCrtKeyImpl(const mpbarrett& modulus, const mpnumber& publicExponent, const mpnumber& privateExponent, const mpbarrett& primeP, const mpbarrett& primeQ, const mpnumber& primeExponentP, const mpnumber& primeExponentQ, const mpnumber& crtCoefficient);
+ virtual ~RSAPrivateCrtKeyImpl();
+
+ virtual RSAPrivateCrtKey* clone() const;
+
+ virtual const mpbarrett& getModulus() const throw ();
+ virtual const mpnumber& getPrivateExponent() const throw ();
+ virtual const mpnumber& getPublicExponent() const throw ();
+ virtual const mpbarrett& getPrimeP() const throw ();
+ virtual const mpbarrett& getPrimeQ() const throw ();
+ virtual const mpnumber& getPrimeExponentP() const throw ();
+ virtual const mpnumber& getPrimeExponentQ() const throw ();
+ virtual const mpnumber& getCrtCoefficient() const throw ();
+
+ virtual const bytearray* getEncoded() const;
+ virtual const String& getAlgorithm() const throw ();
+ virtual const String* getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/RSAPrivateKeyImpl.h"
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+
+using namespace beecrypt::provider;
+
+RSAPrivateKeyImpl::RSAPrivateKeyImpl(const RSAPrivateKey& copy)
+{
+ _n = copy.getModulus();
+ _d = copy.getPrivateExponent();
+ _enc = 0;
+}
+
+RSAPrivateKeyImpl::RSAPrivateKeyImpl(const mpbarrett& n, const mpnumber& d)
+{
+ _n = n;
+ _d = d;
+ _enc = 0;
+}
+
+RSAPrivateKeyImpl::~RSAPrivateKeyImpl()
+{
+ _d.wipe();
+ if (_enc)
+ delete _enc;
+}
+
+RSAPrivateKey* RSAPrivateKeyImpl::clone() const
+{
+ return new RSAPrivateKeyImpl(*this);
+}
+
+const mpbarrett& RSAPrivateKeyImpl::getModulus() const throw ()
+{
+ return _n;
+}
+
+const mpnumber& RSAPrivateKeyImpl::getPrivateExponent() const throw ()
+{
+ return _d;
+}
+
+const bytearray* RSAPrivateKeyImpl::getEncoded() const
+{
+ if (!_enc)
+ _enc = BeeKeyFactory::encode(*this);
+
+ return _enc;
+}
+
+const String& RSAPrivateKeyImpl::getAlgorithm() const throw ()
+{
+ static const String ALGORITHM = UNICODE_STRING_SIMPLE("RSA");
+ return ALGORITHM;
+}
+
+const String* RSAPrivateKeyImpl::getFormat() const throw ()
+{
+ static const String FORMAT = UNICODE_STRING_SIMPLE("BEE");
+ return &FORMAT;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPrivateKeyImpl.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_RSAPRIVATEKEYIMPL_H
+#define _CLASS_RSAPRIVATEKEYIMPL_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/interfaces/RSAPrivateKey.h"
+using beecrypt::security::interfaces::RSAPrivateKey;
+
+namespace beecrypt {
+ namespace provider {
+ class RSAPrivateKeyImpl : public RSAPrivateKey
+ {
+ protected:
+ mpbarrett _n;
+ mpnumber _d;
+ mutable bytearray* _enc;
+
+ public:
+ RSAPrivateKeyImpl(const RSAPrivateKey&);
+ RSAPrivateKeyImpl(const mpbarrett&, const mpnumber&);
+ virtual ~RSAPrivateKeyImpl();
+
+ virtual RSAPrivateKey* clone() const;
+
+ virtual const mpbarrett& getModulus() const throw ();
+ virtual const mpnumber& getPrivateExponent() const throw ();
+
+ virtual const bytearray* getEncoded() const;
+ virtual const String& getAlgorithm() const throw ();
+ virtual const String* getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/RSAPublicKeyImpl.h"
+#include "beecrypt/c++/provider/BeeKeyFactory.h"
+
+using namespace beecrypt::provider;
+
+RSAPublicKeyImpl::RSAPublicKeyImpl(const RSAPublicKey& copy)
+{
+ _n = copy.getModulus();
+ _e = copy.getPublicExponent();
+ _enc = 0;
+}
+
+RSAPublicKeyImpl::RSAPublicKeyImpl(const mpbarrett& n, const mpnumber& e)
+{
+ _n = n;
+ _e = e;
+ _enc = 0;
+}
+
+RSAPublicKeyImpl::~RSAPublicKeyImpl()
+{
+ if (_enc)
+ delete _enc;
+}
+
+RSAPublicKey* RSAPublicKeyImpl::clone() const
+{
+ return new RSAPublicKeyImpl(*this);
+}
+
+const mpbarrett& RSAPublicKeyImpl::getModulus() const throw ()
+{
+ return _n;
+}
+
+const mpnumber& RSAPublicKeyImpl::getPublicExponent() const throw ()
+{
+ return _e;
+}
+
+const bytearray* RSAPublicKeyImpl::getEncoded() const
+{
+ if (!_enc)
+ _enc = BeeKeyFactory::encode(*this);
+
+ return _enc;
+}
+
+const String& RSAPublicKeyImpl::getAlgorithm() const throw ()
+{
+ static const String ALGORITHM = UNICODE_STRING_SIMPLE("RSA");
+ return ALGORITHM;
+}
+
+const String* RSAPublicKeyImpl::getFormat() const throw ()
+{
+ static const String FORMAT = UNICODE_STRING_SIMPLE("BEE");
+ return &FORMAT;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPublicKeyImpl.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_RSAPUBLICKEYIMPL_H
+#define _CLASS_RSAPUBLICKEYIMPL_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/interfaces/RSAPublicKey.h"
+using beecrypt::security::interfaces::RSAPublicKey;
+
+namespace beecrypt {
+ namespace provider {
+ class RSAPublicKeyImpl : public RSAPublicKey
+ {
+ private:
+ mpbarrett _n;
+ mpnumber _e;
+ mutable bytearray* _enc;
+
+ public:
+ RSAPublicKeyImpl(const RSAPublicKey&);
+ RSAPublicKeyImpl(const mpbarrett&, const mpnumber&);
+ virtual ~RSAPublicKeyImpl();
+
+ virtual RSAPublicKey* clone() const;
+
+ virtual const mpbarrett& getModulus() const throw ();
+ virtual const mpnumber& getPublicExponent() const throw ();
+
+ virtual const bytearray* getEncoded() const;
+ virtual const String& getAlgorithm() const throw ();
+ virtual const String* getFormat() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/provider/SHA1Digest.h"
+
+using namespace beecrypt::provider;
+
+SHA1Digest::SHA1Digest() : _digest(20)
+{
+ sha1Reset(&_param);
+}
+
+SHA1Digest::~SHA1Digest()
+{
+}
+
+SHA1Digest* SHA1Digest::clone() const
+{
+ SHA1Digest* result = new SHA1Digest();
+
+ memcpy(&result->_param, &_param, sizeof(sha1Param));
+
+ return result;
+}
+
+const bytearray& SHA1Digest::engineDigest()
+{
+ sha1Digest(&_param, _digest.data());
+
+ return _digest;
+}
+
+size_t SHA1Digest::engineDigest(byte* data, size_t offset, size_t length) throw (ShortBufferException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ if (length < 20)
+ throw ShortBufferException();
+
+ sha1Digest(&_param, data);
+
+ return 20;
+}
+
+size_t SHA1Digest::engineGetDigestLength()
+{
+ return 20;
+}
+
+void SHA1Digest::engineReset()
+{
+ sha1Reset(&_param);
+}
+
+void SHA1Digest::engineUpdate(byte b)
+{
+ sha1Update(&_param, &b, 1);
+}
+
+void SHA1Digest::engineUpdate(const byte* data, size_t offset, size_t length)
+{
+ sha1Update(&_param, data+offset, length);
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SHA1Digest.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_SHA1DIGEST_H
+#define _CLASS_SHA1DIGEST_H
+
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/sha1.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/MessageDigestSpi.h"
+using beecrypt::security::MessageDigestSpi;
+
+namespace beecrypt {
+ namespace provider {
+ class SHA1Digest : public MessageDigestSpi
+ {
+ private:
+ sha1Param _param;
+ bytearray _digest;
+
+ protected:
+ virtual const bytearray& engineDigest();
+ virtual size_t engineDigest(byte*, size_t, size_t) throw (ShortBufferException);
+ virtual size_t engineGetDigestLength();
+ virtual void engineReset();
+ virtual void engineUpdate(byte);
+ virtual void engineUpdate(const byte*, size_t, size_t);
+
+ public:
+ SHA1Digest();
+ virtual ~SHA1Digest();
+
+ virtual SHA1Digest* clone() const;
+
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/adapter.h"
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/provider/SHA1withDSASignature.h"
+#include "beecrypt/c++/security/interfaces/DSAPrivateKey.h"
+using beecrypt::security::interfaces::DSAPrivateKey;
+#include "beecrypt/c++/security/interfaces/DSAPublicKey.h"
+using beecrypt::security::interfaces::DSAPublicKey;
+
+namespace {
+ const byte TAG_SEQUENCE = 0x30;
+ const byte TAG_INTEGER = 0x02;
+
+ typedef int asn1error;
+
+ const asn1error DER_NOT_ENOUGH_DATA = -1;
+ const asn1error DER_IMPLICIT_TAG_LENGTH = -2;
+ const asn1error DER_TAG_TOO_LONG = -3;
+ const asn1error DER_FORMAT_ERROR = -4;
+ const asn1error DER_CONVERSION_ERROR = -5;
+
+ /* compute the size of a DER length encoding */
+ size_t asn1_der_length(size_t length) throw ()
+ {
+ if (length < 0x80)
+ return 1;
+ if (length < 0x100)
+ return 2;
+ if (length < 0x10000)
+ return 3;
+ if (length < 0x1000000)
+ return 4;
+ else
+ return 5;
+ }
+
+ size_t asn1_der_length_of(const mpnumber& n) throw ()
+ {
+ size_t sigbits = mpbits(n.size, n.data);
+
+ return ((sigbits + 7) >> 3) + (((sigbits & 7) == 0) ? 1 : 0);
+ }
+
+ size_t asn1_der_length_of_rssig(const mpnumber& r, const mpnumber& s) throw ()
+ {
+ size_t intlen, seqlen = 0;
+
+ intlen = asn1_der_length_of(r);
+
+ seqlen += 1 + asn1_der_length(intlen) + intlen;
+
+ intlen = asn1_der_length_of(s);
+
+ seqlen += 1 + asn1_der_length(intlen) + intlen;
+
+ return 1 + asn1_der_length(seqlen) + seqlen;
+ }
+
+ size_t asn1_der_encode_length(byte* data, size_t length) throw ()
+ {
+ if (length < 0x80)
+ {
+ data[0] = (byte) length;
+ return 1;
+ }
+ else if (length < 0x100)
+ {
+ data[0] = (byte) 0x81;
+ data[1] = (byte) length;
+ return 2;
+ }
+ else if (length < 0x10000)
+ {
+ data[0] = (byte) 0x82;
+ data[1] = (byte) (length >> 8);
+ data[2] = (byte) (length );
+ return 3;
+ }
+ else if (length < 0x1000000)
+ {
+ data[0] = (byte) 0x83;
+ data[1] = (byte) (length >> 16);
+ data[2] = (byte) (length >> 8);
+ data[3] = (byte) (length );
+ return 4;
+ }
+ else
+ {
+ data[0] = (byte) 0x84;
+ data[1] = (byte) (length >> 24);
+ data[2] = (byte) (length >> 16);
+ data[3] = (byte) (length >> 8);
+ data[4] = (byte) (length );
+ return 5;
+ }
+ }
+
+ size_t asn1_der_decode_length(const byte* data, size_t size, size_t* length) throw (asn1error)
+ {
+ size_t length_bytes;
+ byte tmp;
+
+ if (size == 0)
+ throw DER_NOT_ENOUGH_DATA;
+
+ tmp = *(data++);
+
+ if (tmp < 0x80)
+ {
+ *length = tmp;
+ length_bytes = 0;
+ }
+ else
+ {
+ byte length_bytes = tmp & 0x7f;
+
+ if (length_bytes == 0)
+ throw DER_IMPLICIT_TAG_LENGTH;
+
+ if (length_bytes >= size)
+ throw DER_NOT_ENOUGH_DATA;
+
+ if (length_bytes > sizeof(size_t))
+ throw DER_TAG_TOO_LONG;
+
+ size_t temp = 0;
+
+ for (byte i = 0; i < length_bytes; i++)
+ {
+ tmp = *(data++);
+ temp <<= 8;
+ temp += tmp;
+ }
+
+ *length = temp;
+ }
+ return 1 + length_bytes;
+ }
+
+ size_t asn1_der_encode(byte* data, const mpnumber& n) throw ()
+ {
+ size_t offset = 1, length = asn1_der_length_of(n);
+
+ data[0] = TAG_INTEGER;
+
+ offset += asn1_der_encode_length(data+offset, length);
+
+ i2osp(data+offset, length, n.data, n.size);
+
+ offset += length;
+
+ return offset;
+ }
+
+ size_t asn1_der_decode(const byte* data, size_t size, mpnumber& n) throw (asn1error)
+ {
+ size_t length, offset = 1;
+
+ if (size < 2)
+ throw DER_NOT_ENOUGH_DATA;
+
+ if (data[0] != TAG_INTEGER)
+ throw DER_FORMAT_ERROR;
+
+ offset += asn1_der_decode_length(data+offset, size-offset, &length);
+
+ if (length > (size-offset))
+ throw DER_NOT_ENOUGH_DATA;
+
+ if (mpnsetbin(&n, data+offset, length))
+ throw DER_CONVERSION_ERROR;
+
+ offset += length;
+
+ return offset;
+ }
+
+ size_t asn1_der_encode_rssig(byte* data, const mpnumber& r, const mpnumber& s) throw ()
+ {
+ size_t intlen, seqlen = 0;
+
+ intlen = asn1_der_length_of(r);
+ seqlen += 1 + asn1_der_length(intlen) + intlen;
+ intlen = asn1_der_length_of(s);
+ seqlen += 1 + asn1_der_length(intlen) + intlen;
+
+ *(data++) = TAG_SEQUENCE;
+
+ data += asn1_der_encode_length(data, seqlen);
+ data += asn1_der_encode(data, r);
+ data += asn1_der_encode(data, s);
+
+ return 1 + asn1_der_length(seqlen) + seqlen;
+ }
+
+ size_t asn1_der_decode_rssig(const byte* data, size_t size, mpnumber& r, mpnumber& s) throw (asn1error)
+ {
+ size_t tmp, length, offset = 1;
+
+ if (size < 2)
+ throw DER_NOT_ENOUGH_DATA;
+
+ if (data[0] != TAG_SEQUENCE)
+ throw DER_FORMAT_ERROR;
+
+ offset += asn1_der_decode_length(data+offset, size-offset, &length);
+
+ if (length > (size-offset))
+ throw DER_NOT_ENOUGH_DATA;
+
+ tmp = asn1_der_decode(data+offset, length, r);
+
+ offset += tmp;
+ length -= tmp;
+
+ tmp = asn1_der_decode(data+offset, length, s);
+
+ offset += tmp;
+ length -= tmp;
+
+ if (length > 0)
+ throw DER_FORMAT_ERROR;
+
+ return offset;
+ }
+}
+
+using namespace beecrypt::provider;
+
+SHA1withDSASignature::SHA1withDSASignature()
+{
+}
+
+SHA1withDSASignature::~SHA1withDSASignature()
+{
+}
+
+AlgorithmParameters* SHA1withDSASignature::engineGetParameters() const
+{
+ return 0;
+}
+
+void SHA1withDSASignature::engineSetParameter(const AlgorithmParameterSpec& spec) throw (InvalidAlgorithmParameterException)
+{
+ throw InvalidAlgorithmParameterException("not supported for this algorithm");
+}
+
+void SHA1withDSASignature::engineInitSign(const PrivateKey& key, SecureRandom* random) throw (InvalidKeyException)
+{
+ const DSAPrivateKey* dsa = dynamic_cast<const DSAPrivateKey*>(&key);
+
+ if (dsa)
+ {
+ /* copy key information */
+ _params.p = dsa->getParams().getP();
+ _params.q = dsa->getParams().getQ();
+ _params.g = dsa->getParams().getG();
+ _x = dsa->getX();
+
+ /* reset the hash function */
+ sha1Reset(&_sp);
+
+ _srng = random;
+ }
+ else
+ throw InvalidKeyException("key must be a DSAPrivateKey");
+}
+
+void SHA1withDSASignature::engineInitVerify(const PublicKey& key) throw (InvalidKeyException)
+{
+ const DSAPublicKey* dsa = dynamic_cast<const DSAPublicKey*>(&key);
+
+ if (dsa)
+ {
+ /* copy key information */
+ _params.p = dsa->getParams().getP();
+ _params.q = dsa->getParams().getQ();
+ _params.g = dsa->getParams().getG();
+ _y = dsa->getY();
+
+ /* reset the hash function */
+ sha1Reset(&_sp);
+
+ _srng = 0;
+ }
+ else
+ throw InvalidKeyException("key must be a DSAPrivateKey");
+}
+
+void SHA1withDSASignature::engineUpdate(byte b)
+{
+ sha1Update(&_sp, &b, 1);
+}
+
+void SHA1withDSASignature::engineUpdate(const byte* data, size_t offset, size_t len)
+{
+ sha1Update(&_sp, data+offset, len);
+}
+
+void SHA1withDSASignature::rawsign(mpnumber& r, mpnumber& s) throw (SignatureException)
+{
+ mpnumber hm;
+ byte digest[20];
+
+ sha1Digest(&_sp, digest);
+ mpnsetbin(&hm, digest, 20);
+
+ if (_srng)
+ {
+ randomGeneratorContextAdapter rngc(_srng);
+ if (dsasign(&_params.p, &_params.q, &_params.g, &rngc, &hm, &_x, &r, &s))
+ throw SignatureException("internal error in dsasign function");
+ }
+ else
+ {
+ randomGeneratorContext rngc(randomGeneratorDefault());
+ if (dsasign(&_params.p, &_params.q, &_params.g, &rngc, &hm, &_x, &r, &s))
+ throw SignatureException("internal error in dsasign function");
+ }
+}
+
+bool SHA1withDSASignature::rawvrfy(const mpnumber& r, const mpnumber& s) throw ()
+{
+ mpnumber hm;
+ byte digest[20];
+
+ sha1Digest(&_sp, digest);
+ mpnsetbin(&hm, digest, 20);
+
+ return dsavrfy(&_params.p, &_params.q, &_params.g, &hm, &_y, &r, &s);
+}
+
+bytearray* SHA1withDSASignature::engineSign() throw (SignatureException)
+{
+ mpnumber r, s;
+
+ rawsign(r, s);
+
+ bytearray* signature = new bytearray(asn1_der_length_of_rssig(r, s));
+
+ asn1_der_encode_rssig(signature->data(), r, s);
+
+ return signature;
+}
+
+size_t SHA1withDSASignature::engineSign(byte* signature, size_t offset, size_t len) throw (ShortBufferException, SignatureException)
+{
+ if (!signature)
+ throw NullPointerException();
+
+ mpnumber r, s;
+
+ rawsign(r, s);
+
+ if (asn1_der_length_of_rssig(r, s) > (len - offset))
+ throw ShortBufferException();
+
+ return asn1_der_encode_rssig(signature+offset, r, s);
+}
+
+size_t SHA1withDSASignature::engineSign(bytearray& signature) throw (SignatureException)
+{
+ mpnumber r, s;
+
+ rawsign(r, s);
+
+ signature.resize(asn1_der_length_of_rssig(r, s));
+
+ return asn1_der_encode_rssig(signature.data(), r, s);
+}
+
+bool SHA1withDSASignature::engineVerify(const byte* signature, size_t offset, size_t len) throw (SignatureException)
+{
+ if (!signature)
+ throw NullPointerException();
+
+ mpnumber r, s;
+
+ try
+ {
+ asn1_der_decode_rssig(signature+offset, len-offset, r, s);
+ }
+ catch (asn1error ae)
+ {
+ throw SignatureException("invalid signature");
+ }
+
+ return rawvrfy(r, s);
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SHA1withDSASignature.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_SHA1WITHDSASIGNATURE_H
+#define _CLASS_SHA1WITHDSASIGNATURE_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/dsa.h"
+#include "beecrypt/sha1.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/SignatureSpi.h"
+using beecrypt::security::SecureRandom;
+using beecrypt::security::SignatureSpi;
+using beecrypt::security::AlgorithmParameters;
+using beecrypt::security::InvalidAlgorithmParameterException;
+using beecrypt::security::InvalidKeyException;
+using beecrypt::security::PrivateKey;
+using beecrypt::security::PublicKey;
+using beecrypt::security::ShortBufferException;
+using beecrypt::security::SignatureException;
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+namespace beecrypt {
+ namespace provider {
+ class SHA1withDSASignature : public SignatureSpi
+ {
+ friend class BeeCryptProvider;
+
+ private:
+ dsaparam _params;
+ mpnumber _x;
+ mpnumber _y;
+ sha1Param _sp;
+ SecureRandom* _srng;
+
+ void rawsign(mpnumber &r, mpnumber&s) throw (SignatureException);
+ bool rawvrfy(const mpnumber &r, const mpnumber&s) throw ();
+
+ protected:
+ virtual AlgorithmParameters* engineGetParameters() const;
+ virtual void engineSetParameter(const AlgorithmParameterSpec&) throw (InvalidAlgorithmParameterException);
+
+ virtual void engineInitSign(const PrivateKey&, SecureRandom*) throw (InvalidKeyException);
+ virtual void engineInitVerify(const PublicKey&) throw (InvalidKeyException);
+
+ virtual bytearray* engineSign() throw (SignatureException);
+ virtual size_t engineSign(byte*, size_t, size_t) throw (ShortBufferException, SignatureException);
+ virtual size_t engineSign(bytearray&) throw (SignatureException);
+ virtual bool engineVerify(const byte*, size_t, size_t) throw (SignatureException);
+
+ virtual void engineUpdate(byte);
+ virtual void engineUpdate(const byte*, size_t, size_t);
+
+ public:
+ SHA1withDSASignature();
+ virtual ~SHA1withDSASignature();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/SHA1withRSASignature.h"
+#include "beecrypt/sha1.h"
+
+using namespace beecrypt::provider;
+
+SHA1withRSASignature::SHA1withRSASignature() : PKCS1RSASignature(&sha1)
+{
+}
+
+SHA1withRSASignature::~SHA1withRSASignature()
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SHA1withRSASignature.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_SHA1WITHRSASIGNATURE_H
+#define _CLASS_SHA1WITHRSASIGNATURE_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/provider/PKCS1RSASignature.h"
+
+namespace beecrypt {
+ namespace provider {
+ class SHA1withRSASignature : public PKCS1RSASignature
+ {
+ public:
+ SHA1withRSASignature();
+ ~SHA1withRSASignature();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/provider/SHA256withRSASignature.h"
+
+#include "beecrypt/sha256.h"
+
+using namespace beecrypt::provider;
+
+SHA256withRSASignature::SHA256withRSASignature() : PKCS1RSASignature(&sha256)
+{
+}
+
+SHA256withRSASignature::~SHA256withRSASignature()
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SHA256withRSASignature.h
+ * \ingroup CXX_PROV_m
+ */
+
+#ifndef _CLASS_SHA256WITHRSASIGNATURE_H
+#define _CLASS_SHA256WITHRSASIGNATURE_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/provider/PKCS1RSASignature.h"
+
+namespace beecrypt {
+ namespace provider {
+ class SHA256withRSASignature : public PKCS1RSASignature
+ {
+ public:
+ SHA256withRSASignature();
+ ~SHA256withRSASignature();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#include "beecrypt/c++/resource.h"
+
+#if WIN32
+const char* BEECRYPT_CONF_FILE = "beecrypt.conf";
+#else
+const char* BEECRYPT_CONF_FILE = "/etc/beecrypt.conf";
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file resource.h
+ * \author Bob Deblier <bob.deblier@telenet.be>
+ * \ingroup CXX_m
+ */
+
+#ifndef _BEECRYPT_RESOURCE_H
+#define _BEECRYPT_RESOURCE_H
+
+#include "beecrypt/api.h"
+
+extern const char* BEECRYPT_CONF_FILE;
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/AlgorithmParameterGenerator.h"
+#include "beecrypt/c++/security/AlgorithmParameterGeneratorSpi.h"
+#include "beecrypt/c++/security/AlgorithmParameters.h"
+#include "beecrypt/c++/security/Provider.h"
+#include "beecrypt/c++/security/Security.h"
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+
+using namespace beecrypt::security;
+
+AlgorithmParameterGenerator::AlgorithmParameterGenerator(AlgorithmParameterGeneratorSpi* spi, const String& algorithm, const Provider& provider)
+{
+ _aspi = spi;
+ _algo = algorithm;
+ _prov = &provider;
+}
+
+AlgorithmParameterGenerator::~AlgorithmParameterGenerator()
+{
+ delete _aspi;
+}
+
+AlgorithmParameterGenerator* AlgorithmParameterGenerator::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "AlgorithmParameterGenerator");
+
+ AlgorithmParameterGenerator* result = new AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+AlgorithmParameterGenerator* AlgorithmParameterGenerator::getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "AlgorithmParameterGenerator", provider);
+
+ AlgorithmParameterGenerator* result = new AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+AlgorithmParameterGenerator* AlgorithmParameterGenerator::getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "AlgorithmParameterGenerator", provider);
+
+ AlgorithmParameterGenerator* result = new AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+AlgorithmParameters* AlgorithmParameterGenerator::generateParameters() throw (InvalidAlgorithmParameterException)
+{
+ return _aspi->engineGenerateParameters();
+}
+
+void AlgorithmParameterGenerator::init(const AlgorithmParameterSpec& genParamSpec) throw (InvalidAlgorithmParameterException)
+{
+ _aspi->engineInit(genParamSpec, 0);
+}
+
+void AlgorithmParameterGenerator::init(const AlgorithmParameterSpec& genParamSpec, SecureRandom* random) throw (InvalidAlgorithmParameterException)
+{
+ _aspi->engineInit(genParamSpec, random);
+}
+
+void AlgorithmParameterGenerator::init(size_t size) throw (InvalidParameterException)
+{
+ _aspi->engineInit(size, 0);
+}
+
+void AlgorithmParameterGenerator::init(size_t size, SecureRandom* random) throw (InvalidParameterException)
+{
+ _aspi->engineInit(size, random);
+}
+
+const String& AlgorithmParameterGenerator::getAlgorithm() const throw ()
+{
+ return _algo;
+}
+
+const Provider& AlgorithmParameterGenerator::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file AlgorithmParameterGenerator.h
+ * \author Bob Deblier <bob.deblier@pandora.be>
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_ALGORITHMPARAMETERGENERATOR_H
+#define _CLASS_ALGORITHMPARAMETERGENERATOR_H
+
+// #include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/AlgorithmParameterGeneratorSpi.h"
+using beecrypt::security::AlgorithmParameterGeneratorSpi;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI AlgorithmParameterGenerator
+ {
+ public:
+ static AlgorithmParameterGenerator* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static AlgorithmParameterGenerator* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static AlgorithmParameterGenerator* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ private:
+ AlgorithmParameterGeneratorSpi* _aspi;
+ String _algo;
+ const Provider* _prov;
+
+ protected:
+ AlgorithmParameterGenerator(AlgorithmParameterGeneratorSpi*, const String&, const Provider&);
+
+ public:
+ ~AlgorithmParameterGenerator();
+
+ AlgorithmParameters* generateParameters() throw (InvalidAlgorithmParameterException);
+
+ void init(const AlgorithmParameterSpec&) throw (InvalidAlgorithmParameterException);
+ void init(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException);
+ void init(size_t) throw (InvalidParameterException);
+ void init(size_t, SecureRandom*) throw (InvalidParameterException);
+
+ const String& getAlgorithm() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file AlgorithmParameterGeneratorSpi.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_ALGORITHMPARAMETERGENERATORSPI_H
+#define _CLASS_ALGORITHMPARAMETERGENERATORSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/AlgorithmParameters.h"
+using beecrypt::security::AlgorithmParameters;
+#include "beecrypt/c++/security/SecureRandom.h"
+using beecrypt::security::SecureRandom;
+#include "beecrypt/c++/security/InvalidAlgorithmParameterException.h"
+using beecrypt::security::InvalidAlgorithmParameterException;
+#include "beecrypt/c++/security/InvalidParameterException.h"
+using beecrypt::security::InvalidParameterException;
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+#include <typeinfo>
+using std::type_info;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI AlgorithmParameterGeneratorSpi
+ {
+ friend class BEECRYPTCXXAPI AlgorithmParameterGenerator;
+
+ protected:
+ virtual AlgorithmParameters* engineGenerateParameters() = 0;
+ virtual void engineInit(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException) = 0;
+ virtual void engineInit(size_t, SecureRandom*) throw (InvalidParameterException) = 0;
+
+ public:
+ virtual ~AlgorithmParameterGeneratorSpi() {};
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/AlgorithmParameters.h"
+#include "beecrypt/c++/security/AlgorithmParametersSpi.h"
+#include "beecrypt/c++/security/Provider.h"
+#include "beecrypt/c++/security/Security.h"
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+using namespace beecrypt::security;
+
+AlgorithmParameters::AlgorithmParameters(AlgorithmParametersSpi* spi, const String& algorithm, const Provider& provider)
+{
+ _aspi = spi;
+ _algo = algorithm;
+ _prov = &provider;
+}
+
+AlgorithmParameters::~AlgorithmParameters()
+{
+ delete _aspi;
+}
+
+AlgorithmParameters* AlgorithmParameters::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "AlgorithmParameters");
+
+ AlgorithmParameters* result = new AlgorithmParameters((AlgorithmParametersSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+AlgorithmParameters* AlgorithmParameters::getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "AlgorithmParameters", provider);
+
+ AlgorithmParameters* result = new AlgorithmParameters((AlgorithmParametersSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+AlgorithmParameters* AlgorithmParameters::getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "AlgorithmParameters", provider);
+
+ AlgorithmParameters* result = new AlgorithmParameters((AlgorithmParametersSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+AlgorithmParameterSpec* AlgorithmParameters::getParameterSpec(const type_info& info) throw (InvalidParameterSpecException)
+{
+ return _aspi->engineGetParameterSpec(info);
+}
+
+void AlgorithmParameters::init(const AlgorithmParameterSpec& spec) throw (InvalidParameterSpecException)
+{
+ _aspi->engineInit(spec);
+}
+
+void AlgorithmParameters::init(const byte* data, size_t size)
+{
+ _aspi->engineInit(data, size);
+}
+
+void AlgorithmParameters::init(const byte* data, size_t size, const String& format)
+{
+ _aspi->engineInit(data, size, format);
+}
+
+const String& AlgorithmParameters::getAlgorithm() const throw ()
+{
+ return _algo;
+}
+
+const Provider& AlgorithmParameters::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file AlgorithmParameters.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_ALGORITHMPARAMETERS_H
+#define _CLASS_ALGORITHMPARAMETERS_H
+
+// #include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/AlgorithmParametersSpi.h"
+using beecrypt::security::AlgorithmParametersSpi;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+#include <typeinfo>
+using std::type_info;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI AlgorithmParameters
+ {
+ public:
+ static AlgorithmParameters* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static AlgorithmParameters* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static AlgorithmParameters* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ private:
+ AlgorithmParametersSpi* _aspi;
+ String _algo;
+ const Provider* _prov;
+
+ protected:
+ AlgorithmParameters(AlgorithmParametersSpi*, const String&, const Provider&);
+
+ public:
+ ~AlgorithmParameters();
+
+ AlgorithmParameterSpec* getParameterSpec(const type_info&) throw (InvalidParameterSpecException);
+
+ void init(const AlgorithmParameterSpec&) throw (InvalidParameterSpecException);
+ void init(const byte*, size_t);
+ void init(const byte*, size_t, const String&);
+
+ const String& getAlgorithm() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file AlgorithmParametersSpi.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_ALGORITHMPARAMETERSSPI_H
+#define _CLASS_ALGORITHMPARAMETERSSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+#include "beecrypt/c++/security/spec/InvalidParameterSpecException.h"
+using beecrypt::security::spec::InvalidParameterSpecException;
+
+#include <typeinfo>
+using std::type_info;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI AlgorithmParametersSpi
+ {
+ friend class BEECRYPTCXXAPI AlgorithmParameters;
+
+ protected:
+ virtual AlgorithmParameterSpec* engineGetParameterSpec(const type_info&) = 0;
+
+ virtual void engineInit(const AlgorithmParameterSpec&) throw (InvalidParameterSpecException) = 0;
+ virtual void engineInit(const byte*, size_t) = 0;
+ virtual void engineInit(const byte*, size_t, const String&) = 0;
+
+ public:
+ virtual ~AlgorithmParametersSpi() {};
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/security/DigestInputStream.h"
+
+using namespace beecrypt::security;
+
+DigestInputStream::DigestInputStream(InputStream& in, MessageDigest& m) : FilterInputStream(in), digest(m)
+{
+ _on = true;
+}
+
+DigestInputStream::~DigestInputStream()
+{
+}
+
+int DigestInputStream::read() throw (IOException)
+{
+ int rc = in.read();
+ if (rc >= 0 && _on)
+ digest.update((byte) rc);
+ return rc;
+}
+
+int DigestInputStream::read(byte *data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ int rc = in.read(data, offset, length);
+ if (rc >= 0 && _on)
+ digest.update(data, offset, rc);
+ return rc;
+}
+
+void DigestInputStream::on(bool on)
+{
+ _on = on;
+}
+
+MessageDigest& DigestInputStream::getMessageDigest()
+{
+ return digest;
+}
+
+void DigestInputStream::setMessageDigest(MessageDigest& m)
+{
+ digest = m;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DigestInputStream.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_DIGESTINPUTSTREAM_H
+#define _CLASS_DIGESTINPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/FilterInputStream.h"
+using beecrypt::io::FilterInputStream;
+#include "beecrypt/c++/security/MessageDigest.h"
+using beecrypt::security::MessageDigest;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI DigestInputStream : public FilterInputStream
+ {
+ private:
+ bool _on;
+
+ protected:
+ MessageDigest& digest;
+
+ public:
+ DigestInputStream(InputStream&, MessageDigest&);
+ virtual ~DigestInputStream();
+
+ virtual int read() throw (IOException);
+ virtual int read(byte* data, size_t offset, size_t length) throw (IOException);
+
+ void on(bool);
+
+ MessageDigest& getMessageDigest();
+ void setMessageDigest(MessageDigest&);
+ };
+ }
+}
+
+#endif
+
+#endif
+
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/lang/NullPointerException.h"
+using beecrypt::lang::NullPointerException;
+#include "beecrypt/c++/security/DigestOutputStream.h"
+
+using namespace beecrypt::security;
+
+DigestOutputStream::DigestOutputStream(OutputStream& out, MessageDigest& m) : FilterOutputStream(out), digest(m)
+{
+ _on = true;
+}
+
+DigestOutputStream::~DigestOutputStream()
+{
+}
+
+void DigestOutputStream::write(byte b) throw (IOException)
+{
+ out.write(b);
+ if (_on)
+ digest.update(b);
+}
+
+void DigestOutputStream::write(const byte *data, size_t offset, size_t length) throw (IOException)
+{
+ if (!data)
+ throw NullPointerException();
+
+ out.write(data, offset, length);
+ if (_on)
+ digest.update(data, offset, length);
+}
+
+void DigestOutputStream::on(bool on)
+{
+ _on = on;
+}
+
+MessageDigest& DigestOutputStream::getMessageDigest()
+{
+ return digest;
+}
+
+void DigestOutputStream::setMessageDigest(MessageDigest& m)
+{
+ digest = m;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DigestOutputStream.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_DIGESTOUTPUTSTREAM_H
+#define _CLASS_DIGESTOUTPUTSTREAM_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/FilterOutputStream.h"
+using beecrypt::io::FilterOutputStream;
+#include "beecrypt/c++/security/MessageDigest.h"
+using beecrypt::security::MessageDigest;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI DigestOutputStream : public FilterOutputStream
+ {
+ private:
+ bool _on;
+
+ protected:
+ MessageDigest& digest;
+
+ public:
+ DigestOutputStream(OutputStream&, MessageDigest&);
+ virtual ~DigestOutputStream();
+
+ virtual void write(byte) throw (IOException);
+ virtual void write(const byte* data, size_t offset, size_t length) throw (IOException);
+
+ void on(bool);
+
+ MessageDigest& getMessageDigest();
+ void setMessageDigest(MessageDigest&);
+ };
+ }
+}
+
+#endif
+
+#endif
+
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+
+using namespace beecrypt::security;
+
+GeneralSecurityException::GeneralSecurityException() throw ()
+{
+}
+
+GeneralSecurityException::GeneralSecurityException(const String& message) throw () : Exception(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file GeneralSecurityException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_GENERALSECURITYEXCEPTION_H
+#define _CLASS_GENERALSECURITYEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/Exception.h"
+using beecrypt::lang::Exception;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI GeneralSecurityException : public Exception
+ {
+ public:
+ GeneralSecurityException() throw ();
+ GeneralSecurityException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/InvalidAlgorithmParameterException.h"
+
+using namespace beecrypt::security;
+
+InvalidAlgorithmParameterException::InvalidAlgorithmParameterException() throw ()
+{
+}
+
+InvalidAlgorithmParameterException::InvalidAlgorithmParameterException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file InvalidAlgorithmParameterException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_INVALIDALGORITHMPARAMETEREXCEPTION_H
+#define _CLASS_INVALIDALGORITHMPARAMETEREXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI InvalidAlgorithmParameterException : public GeneralSecurityException
+ {
+ public:
+ InvalidAlgorithmParameterException() throw ();
+ InvalidAlgorithmParameterException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/InvalidKeyException.h"
+
+using namespace beecrypt::security;
+
+InvalidKeyException::InvalidKeyException() throw ()
+{
+}
+
+InvalidKeyException::InvalidKeyException(const String& message) throw () : KeyException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file InvalidKeyException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_INVALIDKEYEXCEPTION_H
+#define _CLASS_INVALIDKEYEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyException.h"
+using beecrypt::security::KeyException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI InvalidKeyException : public KeyException
+ {
+ public:
+ InvalidKeyException() throw ();
+ InvalidKeyException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/InvalidParameterException.h"
+
+using namespace beecrypt::security;
+
+InvalidParameterException::InvalidParameterException() throw ()
+{
+}
+
+InvalidParameterException::InvalidParameterException(const String& message) throw () : IllegalArgumentException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file InvalidParameterException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_INVALIDPARAMETEREXCEPTION_H
+#define _CLASS_INVALIDPARAMETEREXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/IllegalArgumentException.h"
+using beecrypt::lang::IllegalArgumentException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI InvalidParameterException : public IllegalArgumentException
+ {
+ public:
+ InvalidParameterException() throw ();
+ InvalidParameterException(const String&) throw ();
+ };
+ }
+}
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Key.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _INTERFACE_KEY_H
+#define _INTERFACE_KEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/lang/String.h"
+using beecrypt::lang::String;
+
+namespace beecrypt {
+ namespace security {
+ /*!\brief The top-level interface for all keys.
+ * \ingroup CXX_IF_m
+ */
+ class BEECRYPTCXXAPI Key
+ {
+ public:
+ virtual ~Key() {};
+
+ virtual Key* clone() const = 0;
+
+ virtual const bytearray* getEncoded() const = 0;
+
+ virtual const String& getAlgorithm() const throw () = 0;
+ virtual const String* getFormat() const throw () = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/KeyException.h"
+
+using namespace beecrypt::security;
+
+KeyException::KeyException() throw ()
+{
+}
+
+KeyException::KeyException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYEXCEPTION_H
+#define _CLASS_KEYEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyException : public GeneralSecurityException
+ {
+ public:
+ KeyException() throw ();
+ KeyException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/KeyFactory.h"
+#include "beecrypt/c++/security/Security.h"
+
+using namespace beecrypt::security;
+
+KeyFactory::KeyFactory(KeyFactorySpi* spi, const String& algorithm, const Provider& provider)
+{
+ _kspi = spi;
+ _algo = algorithm;
+ _prov = &provider;
+}
+
+KeyFactory::~KeyFactory()
+{
+ delete _kspi;
+}
+
+KeyFactory* KeyFactory::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "KeyFactory");
+
+ KeyFactory* result = new KeyFactory((KeyFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+KeyFactory* KeyFactory::getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "KeyFactory", provider);
+
+ KeyFactory* result = new KeyFactory((KeyFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+KeyFactory* KeyFactory::getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "KeyFactory", provider);
+
+ KeyFactory* result = new KeyFactory((KeyFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+PrivateKey* KeyFactory::generatePrivate(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ return _kspi->engineGeneratePrivate(spec);
+}
+
+PublicKey* KeyFactory::generatePublic(const KeySpec& spec) throw (InvalidKeySpecException)
+{
+ return _kspi->engineGeneratePublic(spec);
+}
+
+KeySpec* KeyFactory::getKeySpec(const Key& key, const type_info& info) throw (InvalidKeySpecException)
+{
+ return _kspi->engineGetKeySpec(key, info);
+}
+
+Key* KeyFactory::translateKey(const Key& key) throw (InvalidKeyException)
+{
+ return _kspi->engineTranslateKey(key);
+}
+
+const String& KeyFactory::getAlgorithm() const throw ()
+{
+ return _algo;
+}
+
+const Provider& KeyFactory::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyFactory.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYFACTORY_H
+#define _CLASS_KEYFACTORY_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyFactorySpi.h"
+using beecrypt::security::KeyFactorySpi;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+#include <typeinfo>
+using std::type_info;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyFactory
+ {
+ public:
+ static KeyFactory* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static KeyFactory* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static KeyFactory* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ private:
+ KeyFactorySpi* _kspi;
+ String _algo;
+ const Provider* _prov;
+
+ protected:
+ KeyFactory(KeyFactorySpi*, const String&, const Provider&);
+
+ public:
+ ~KeyFactory();
+
+ PrivateKey* generatePrivate(const KeySpec&) throw (InvalidKeySpecException);
+ PublicKey* generatePublic(const KeySpec&) throw (InvalidKeySpecException);
+
+ KeySpec* getKeySpec(const Key& key, const type_info&) throw (InvalidKeySpecException);
+
+ Key* translateKey(const Key&) throw (InvalidKeyException);
+
+ const String& getAlgorithm() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyFactorySpi.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYFACTORYSPI_H
+#define _CLASS_KEYFACTORYSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/PrivateKey.h"
+using beecrypt::security::PrivateKey;
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+#include "beecrypt/c++/security/InvalidKeyException.h"
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+#include "beecrypt/c++/security/spec/InvalidKeySpecException.h"
+using beecrypt::security::spec::InvalidKeySpecException;
+
+#include <typeinfo>
+using std::type_info;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyFactorySpi
+ {
+ friend class KeyFactory;
+
+ protected:
+ virtual PrivateKey* engineGeneratePrivate(const KeySpec&) throw (InvalidKeySpecException) = 0;
+ virtual PublicKey* engineGeneratePublic(const KeySpec&) throw (InvalidKeySpecException) = 0;
+
+ virtual KeySpec* engineGetKeySpec(const Key&, const type_info&) throw (InvalidKeySpecException) = 0;
+
+ virtual Key* engineTranslateKey(const Key&) throw (InvalidKeyException) = 0;
+
+ public:
+ virtual ~KeyFactorySpi() {};
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/KeyPair.h"
+
+using namespace beecrypt::security;
+
+KeyPair::KeyPair(const PublicKey& pub, const PrivateKey& pri) : pub(pub.clone()), pri(pri.clone())
+{
+}
+
+KeyPair::KeyPair(PublicKey* pub, PrivateKey* pri) : pub(pub), pri(pri)
+{
+}
+
+KeyPair::~KeyPair()
+{
+ delete pub;
+ delete pri;
+}
+
+const PublicKey& KeyPair::getPublic() const throw ()
+{
+ return *pub;
+}
+
+const PrivateKey& KeyPair::getPrivate() const throw ()
+{
+ return *pri;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyPair.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYPAIR_H
+#define _CLASS_KEYPAIR_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/PrivateKey.h"
+using beecrypt::security::PrivateKey;
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyPair
+ {
+ friend class KeyPairGenerator;
+
+ private:
+ PublicKey* pub;
+ PrivateKey* pri;
+
+ public:
+ KeyPair(const PublicKey&, const PrivateKey&);
+ KeyPair(PublicKey*, PrivateKey*);
+ ~KeyPair();
+
+ const PublicKey& getPublic() const throw ();
+ const PrivateKey& getPrivate() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/KeyPairGenerator.h"
+#include "beecrypt/c++/security/Security.h"
+
+using namespace beecrypt::security;
+
+KeyPairGenerator::KeyPairGenerator(KeyPairGeneratorSpi* spi, const String& algorithm, const Provider& provider)
+{
+ _kspi = spi;
+ _algo = algorithm;
+ _prov = &provider;
+}
+
+KeyPairGenerator::~KeyPairGenerator()
+{
+ delete _kspi;
+}
+
+KeyPairGenerator* KeyPairGenerator::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "KeyPairGenerator");
+
+ KeyPairGenerator* result = new KeyPairGenerator((KeyPairGeneratorSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+KeyPairGenerator* KeyPairGenerator::getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "KeyPairGenerator", provider);
+
+ KeyPairGenerator* result = new KeyPairGenerator((KeyPairGeneratorSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+KeyPairGenerator* KeyPairGenerator::getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "KeyPairGenerator", provider);
+
+ KeyPairGenerator* result = new KeyPairGenerator((KeyPairGeneratorSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+KeyPair* KeyPairGenerator::generateKeyPair()
+{
+ return _kspi->engineGenerateKeyPair();
+}
+
+void KeyPairGenerator::initialize(const AlgorithmParameterSpec& spec) throw (InvalidAlgorithmParameterException)
+{
+ _kspi->engineInitialize(spec, 0);
+}
+
+void KeyPairGenerator::initialize(const AlgorithmParameterSpec& spec, SecureRandom* random) throw (InvalidAlgorithmParameterException)
+{
+ _kspi->engineInitialize(spec, random);
+}
+
+void KeyPairGenerator::initialize(size_t keysize) throw (InvalidParameterException)
+{
+ _kspi->engineInitialize(keysize, 0);
+}
+
+void KeyPairGenerator::initialize(size_t keysize, SecureRandom* random) throw (InvalidParameterException)
+{
+ _kspi->engineInitialize(keysize, random);
+}
+
+const String& KeyPairGenerator::getAlgorithm() const throw ()
+{
+ return _algo;
+}
+
+const Provider& KeyPairGenerator::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyPairGenerator.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYPAIRGENERATOR_H
+#define _CLASS_KEYPAIRGENERATOR_H
+
+// #include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyPairGeneratorSpi.h"
+using beecrypt::security::KeyPairGeneratorSpi;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyPairGenerator
+ {
+ public:
+ static KeyPairGenerator* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static KeyPairGenerator* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static KeyPairGenerator* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ private:
+ KeyPairGeneratorSpi* _kspi;
+ String _algo;
+ const Provider* _prov;
+
+ protected:
+ KeyPairGenerator(KeyPairGeneratorSpi*, const String&, const Provider&);
+
+ public:
+ ~KeyPairGenerator();
+
+ KeyPair* generateKeyPair();
+
+ void initialize(const AlgorithmParameterSpec&) throw (InvalidAlgorithmParameterException);
+ void initialize(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException);
+ void initialize(size_t) throw(InvalidParameterException);
+ void initialize(size_t, SecureRandom*) throw (InvalidParameterException);
+
+ const String& getAlgorithm() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyPairGeneratorSpi.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYPAIRGENERATORSPI_H
+#define _CLASS_KEYPAIRGENERATORSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/KeyPair.h"
+using beecrypt::security::KeyPair;
+#include "beecrypt/c++/security/SecureRandom.h"
+using beecrypt::security::SecureRandom;
+#include "beecrypt/c++/security/InvalidAlgorithmParameterException.h"
+using beecrypt::security::InvalidAlgorithmParameterException;
+#include "beecrypt/c++/security/InvalidParameterException.h"
+using beecrypt::security::InvalidParameterException;
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyPairGeneratorSpi
+ {
+ friend class KeyPairGenerator;
+
+ protected:
+ virtual KeyPair* engineGenerateKeyPair() = 0;
+
+ virtual void engineInitialize(const AlgorithmParameterSpec&, SecureRandom*) throw (InvalidAlgorithmParameterException) = 0;
+ virtual void engineInitialize(size_t, SecureRandom*) throw (InvalidParameterException) = 0;
+
+ public:
+ virtual ~KeyPairGeneratorSpi() {};
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/KeyStore.h"
+#include "beecrypt/c++/security/Security.h"
+
+using namespace beecrypt::security;
+
+KeyStore::KeyStore(KeyStoreSpi* spi, const String& type, const Provider& provider)
+{
+ _kspi = spi;
+ _type = type;
+ _prov = &provider;
+ _init = false;
+}
+
+KeyStore::~KeyStore()
+{
+ delete _kspi;
+}
+
+KeyStore* KeyStore::getInstance(const String& type) throw (KeyStoreException)
+{
+ try
+ {
+ Security::spi* tmp = Security::getSpi(type, "KeyStore");
+
+ KeyStore* result = new KeyStore((KeyStoreSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+ }
+ catch (NoSuchAlgorithmException& ex)
+ {
+ throw KeyStoreException(ex.getMessage());
+ }
+}
+
+KeyStore* KeyStore::getInstance(const String& type, const String& provider) throw (KeyStoreException, NoSuchProviderException)
+{
+ try
+ {
+ Security::spi* tmp = Security::getSpi(type, "KeyStore", provider);
+
+ KeyStore* result = new KeyStore((KeyStoreSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+ }
+ catch (NoSuchAlgorithmException& ex)
+ {
+ throw KeyStoreException(ex.getMessage());
+ }
+}
+
+KeyStore* KeyStore::getInstance(const String& type, const Provider& provider) throw (KeyStoreException)
+{
+ try
+ {
+ Security::spi* tmp = Security::getSpi(type, "KeyStore", provider);
+
+ KeyStore* result = new KeyStore((KeyStoreSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+ }
+ catch (NoSuchAlgorithmException& ex)
+ {
+ throw KeyStoreException(ex.getMessage());
+ }
+}
+
+const String& KeyStore::getDefaultType()
+{
+ return Security::getKeyStoreDefault();
+}
+
+Key* KeyStore::getKey(const String& alias, const array<javachar>& password) throw (KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException)
+{
+ return _kspi->engineGetKey(alias, password);
+}
+
+void KeyStore::setKeyEntry(const String& alias, const bytearray& key, const vector<Certificate*>& chain) throw (KeyStoreException)
+{
+ _kspi->engineSetKeyEntry(alias, key, chain);
+}
+
+void KeyStore::setKeyEntry(const String& alias, const Key& key, const array<javachar>& password, const vector<Certificate*>& chain) throw (KeyStoreException)
+{
+ _kspi->engineSetKeyEntry(alias, key, password, chain);
+}
+
+Enumeration* KeyStore::aliases()
+{
+ if (!_init)
+ throw KeyStoreException("Uninitialized keystore");
+
+ return _kspi->engineAliases();
+}
+
+bool KeyStore::containsAlias(const String& alias) throw (KeyStoreException)
+{
+ if (!_init)
+ throw KeyStoreException("Uninitialized keystore");
+
+ return _kspi->engineContainsAlias(alias);
+}
+
+const Certificate* KeyStore::getCertificate(const String& alias) throw (KeyStoreException)
+{
+ if (!_init)
+ throw KeyStoreException("Uninitialized keystore");
+
+ return _kspi->engineGetCertificate(alias);
+}
+
+bool KeyStore::isCertificateEntry(const String& alias) throw (KeyStoreException)
+{
+ if (!_init)
+ throw KeyStoreException("Uninitialized keystore");
+
+ return _kspi->engineIsCertificateEntry(alias);
+}
+
+bool KeyStore::isKeyEntry(const String& alias) throw (KeyStoreException)
+{
+ if (!_init)
+ throw KeyStoreException("Uninitialized keystore");
+
+ return _kspi->engineIsKeyEntry(alias);
+}
+
+void KeyStore::load(InputStream* in, const array<javachar>* password) throw (IOException, NoSuchAlgorithmException, CertificateException)
+{
+ _kspi->engineLoad(in, password);
+
+ _init = true;
+}
+
+size_t KeyStore::size() const throw (KeyStoreException)
+{
+ if (!_init)
+ throw KeyStoreException("Uninitialized keystore");
+
+ return _kspi->engineSize();
+}
+
+void KeyStore::store(OutputStream& out, const array<javachar>* password) throw (IOException, KeyStoreException, NoSuchAlgorithmException, CertificateException)
+{
+ if (!_init)
+ throw KeyStoreException("Uninitialized keystore");
+
+ _kspi->engineStore(out, password);
+}
+
+const String& KeyStore::getType() const throw ()
+{
+ return _type;
+}
+
+const Provider& KeyStore::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyStore.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYSTORE_H
+#define _CLASS_KEYSTORE_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/InputStream.h"
+using beecrypt::io::InputStream;
+#include "beecrypt/c++/io/OutputStream.h"
+using beecrypt::io::OutputStream;
+#include "beecrypt/c++/security/KeyStoreSpi.h"
+using beecrypt::security::KeyStoreSpi;
+#include "beecrypt/c++/security/KeyStoreException.h"
+using beecrypt::security::KeyStoreException;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyStore
+ {
+ public:
+ static KeyStore* getInstance(const String&) throw (KeyStoreException);
+ static KeyStore* getInstance(const String&, const String&) throw (KeyStoreException, NoSuchProviderException);
+ static KeyStore* getInstance(const String&, const Provider&) throw (KeyStoreException);
+
+ static const String& getDefaultType();
+
+ private:
+ KeyStoreSpi* _kspi;
+ String _type;
+ const Provider* _prov;
+ bool _init;
+
+ protected:
+ KeyStore(KeyStoreSpi*, const String&, const Provider&);
+
+ public:
+ ~KeyStore();
+
+ Enumeration* aliases();
+ bool containsAlias(const String&) throw (KeyStoreException);
+
+ const Certificate* getCertificate(const String&) throw (KeyStoreException);
+ const String& getCertificateAlias(const Certificate&) throw (KeyStoreException);
+ const vector<Certificate*>* getCertificateChain(const String&) throw (KeyStoreException);
+ bool isCertificateEntry(const String& alias) throw (KeyStoreException);
+ void setCertificateEntry(const String& alias, const Certificate& cert) throw (KeyStoreException);
+
+ void deleteEntry(const String&) throw (KeyStoreException);
+
+ Key* getKey(const String& alias, const array<javachar>& password) throw (KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException);
+ bool isKeyEntry(const String& alias) throw (KeyStoreException);
+ void setKeyEntry(const String& alias, const bytearray& key, const vector<Certificate*>&) throw (KeyStoreException);
+ void setKeyEntry(const String& alias, const Key& key, const array<javachar>& password, const vector<Certificate*>&) throw (KeyStoreException);
+
+ size_t size() const throw (KeyStoreException);
+
+ void load(InputStream* in, const array<javachar>* password) throw (IOException, NoSuchAlgorithmException, CertificateException);
+ void store(OutputStream& out, const array<javachar>* password) throw (KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException);
+
+ const String& getType() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/KeyStoreException.h"
+
+using namespace beecrypt::security;
+
+KeyStoreException::KeyStoreException() throw ()
+{
+}
+
+KeyStoreException::KeyStoreException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyStoreException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYSTOREEXCEPTION_H
+#define _CLASS_KEYSTOREEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyStoreException : public GeneralSecurityException
+ {
+ public:
+ KeyStoreException() throw ();
+ KeyStoreException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeyStoreSpi.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_KEYSTORESPI_H
+#define _CLASS_KEYSTORESPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/InputStream.h"
+using beecrypt::io::InputStream;
+#include "beecrypt/c++/io/OutputStream.h"
+using beecrypt::io::OutputStream;
+#include "beecrypt/c++/security/KeyStoreException.h"
+using beecrypt::security::KeyStoreException;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+#include "beecrypt/c++/security/UnrecoverableKeyException.h"
+using beecrypt::security::UnrecoverableKeyException;
+#include "beecrypt/c++/security/cert/Certificate.h"
+using beecrypt::security::cert::Certificate;
+#include "beecrypt/c++/security/cert/CertificateException.h"
+using beecrypt::security::cert::CertificateException;
+#include "beecrypt/c++/util/Date.h"
+using beecrypt::util::Date;
+#include "beecrypt/c++/util/Enumeration.h"
+using beecrypt::util::Enumeration;
+
+#include <typeinfo>
+using std::type_info;
+#include <vector>
+using std::vector;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI KeyStoreSpi
+ {
+ friend class KeyStore;
+
+ protected:
+ virtual Enumeration* engineAliases() = 0;
+ virtual bool engineContainsAlias(const String&) = 0;
+
+ virtual void engineDeleteEntry(const String&) throw (KeyStoreException) = 0;
+ virtual const Date* engineGetCreationDate(const String&) = 0;
+
+ virtual const Certificate* engineGetCertificate(const String&) = 0;
+ virtual const String* engineGetCertificateAlias(const Certificate&) = 0;
+ virtual const vector<Certificate*>* engineGetCertificateChain(const String&) = 0;
+ virtual bool engineIsCertificateEntry(const String& alias) = 0;
+ virtual void engineSetCertificateEntry(const String& alias, const Certificate& cert) throw (KeyStoreException) = 0;
+
+ virtual Key* engineGetKey(const String& alias, const array<javachar>& password) throw (NoSuchAlgorithmException, UnrecoverableKeyException) = 0;
+ virtual bool engineIsKeyEntry(const String& alias) = 0;
+ virtual void engineSetKeyEntry(const String& alias, const bytearray& key, const vector<Certificate*>&) throw (KeyStoreException) = 0;
+ virtual void engineSetKeyEntry(const String& alias, const Key& key, const array<javachar>& password, const vector<Certificate*>&) throw (KeyStoreException) = 0;
+
+ virtual size_t engineSize() const = 0;
+
+ virtual void engineLoad(InputStream* in, const array<javachar>* password) throw (IOException, CertificateException, NoSuchAlgorithmException) = 0;
+ virtual void engineStore(OutputStream& out, const array<javachar>* password) throw (IOException, CertificateException, NoSuchAlgorithmException) = 0;
+
+ public:
+ virtual ~KeyStoreSpi() {};
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+SUBDIRS = cert interfaces spec
+
+noinst_LTLIBRARIES = libcxxsecurity.la
+
+cxxsecuritydir=$(pkgincludedir)/c++/security
+
+libcxxsecurity_la_SOURCES =\
+AlgorithmParameterGenerator.cxx \
+AlgorithmParameters.cxx \
+DigestInputStream.cxx \
+DigestOutputStream.cxx \
+GeneralSecurityException.cxx \
+InvalidAlgorithmParameterException.cxx \
+InvalidKeyException.cxx \
+InvalidParameterException.cxx \
+KeyException.cxx \
+KeyFactory.cxx \
+KeyPair.cxx \
+KeyPairGenerator.cxx \
+KeyStore.cxx \
+KeyStoreException.cxx \
+MessageDigest.cxx \
+NoSuchAlgorithmException.cxx \
+NoSuchProviderException.cxx \
+Provider.cxx \
+SecureRandom.cxx \
+Security.cxx \
+ShortBufferException.cxx \
+Signature.cxx \
+SignatureException.cxx \
+UnrecoverableKeyException.cxx
+libcxxsecurity_la_LIBADD = cert/libcxxsecuritycert.la spec/libcxxsecurityspec.la
+
+cxxsecurity_HEADERS =\
+AlgorithmParameterGenerator.h \
+AlgorithmParameterGeneratorSpi.h \
+AlgorithmParameters.h \
+AlgorithmParametersSpi.h \
+DigestInputStream.h \
+DigestOutputStream.h \
+GeneralSecurityException.h \
+InvalidAlgorithmParameterException.h \
+InvalidKeyException.h \
+InvalidParameterException.h \
+KeyFactory.h \
+KeyFactorySpi.h \
+Key.h \
+KeyException.h \
+KeyPairGenerator.h \
+KeyPairGeneratorSpi.h \
+KeyPair.h \
+KeyStoreException.h \
+KeyStore.h \
+KeyStoreSpi.h \
+MessageDigest.h \
+MessageDigestSpi.h \
+NoSuchAlgorithmException.h \
+NoSuchProviderException.h \
+PrivateKey.h \
+Provider.h \
+PublicKey.h \
+SecureRandom.h \
+SecureRandomSpi.h \
+Security.h \
+ShortBufferException.h \
+Signature.h \
+SignatureException.h \
+SignatureSpi.h \
+UnrecoverableKeyException.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxsecurity_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/security
+DIST_COMMON = $(cxxsecurity_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxsecurity_la_DEPENDENCIES = cert/libcxxsecuritycert.la \
+ spec/libcxxsecurityspec.la
+am_libcxxsecurity_la_OBJECTS = AlgorithmParameterGenerator.lo \
+ AlgorithmParameters.lo DigestInputStream.lo \
+ DigestOutputStream.lo GeneralSecurityException.lo \
+ InvalidAlgorithmParameterException.lo InvalidKeyException.lo \
+ InvalidParameterException.lo KeyException.lo KeyFactory.lo \
+ KeyPair.lo KeyPairGenerator.lo KeyStore.lo \
+ KeyStoreException.lo MessageDigest.lo \
+ NoSuchAlgorithmException.lo NoSuchProviderException.lo \
+ Provider.lo SecureRandom.lo Security.lo \
+ ShortBufferException.lo Signature.lo SignatureException.lo \
+ UnrecoverableKeyException.lo
+libcxxsecurity_la_OBJECTS = $(am_libcxxsecurity_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxsecurity_la_SOURCES)
+DIST_SOURCES = $(libcxxsecurity_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+am__installdirs = "$(DESTDIR)$(cxxsecuritydir)"
+cxxsecurityHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxsecurity_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+SUBDIRS = cert interfaces spec
+noinst_LTLIBRARIES = libcxxsecurity.la
+cxxsecuritydir = $(pkgincludedir)/c++/security
+libcxxsecurity_la_SOURCES = \
+AlgorithmParameterGenerator.cxx \
+AlgorithmParameters.cxx \
+DigestInputStream.cxx \
+DigestOutputStream.cxx \
+GeneralSecurityException.cxx \
+InvalidAlgorithmParameterException.cxx \
+InvalidKeyException.cxx \
+InvalidParameterException.cxx \
+KeyException.cxx \
+KeyFactory.cxx \
+KeyPair.cxx \
+KeyPairGenerator.cxx \
+KeyStore.cxx \
+KeyStoreException.cxx \
+MessageDigest.cxx \
+NoSuchAlgorithmException.cxx \
+NoSuchProviderException.cxx \
+Provider.cxx \
+SecureRandom.cxx \
+Security.cxx \
+ShortBufferException.cxx \
+Signature.cxx \
+SignatureException.cxx \
+UnrecoverableKeyException.cxx
+
+libcxxsecurity_la_LIBADD = cert/libcxxsecuritycert.la spec/libcxxsecurityspec.la
+cxxsecurity_HEADERS = \
+AlgorithmParameterGenerator.h \
+AlgorithmParameterGeneratorSpi.h \
+AlgorithmParameters.h \
+AlgorithmParametersSpi.h \
+DigestInputStream.h \
+DigestOutputStream.h \
+GeneralSecurityException.h \
+InvalidAlgorithmParameterException.h \
+InvalidKeyException.h \
+InvalidParameterException.h \
+KeyFactory.h \
+KeyFactorySpi.h \
+Key.h \
+KeyException.h \
+KeyPairGenerator.h \
+KeyPairGeneratorSpi.h \
+KeyPair.h \
+KeyStoreException.h \
+KeyStore.h \
+KeyStoreSpi.h \
+MessageDigest.h \
+MessageDigestSpi.h \
+NoSuchAlgorithmException.h \
+NoSuchProviderException.h \
+PrivateKey.h \
+Provider.h \
+PublicKey.h \
+SecureRandom.h \
+SecureRandomSpi.h \
+Security.h \
+ShortBufferException.h \
+Signature.h \
+SignatureException.h \
+SignatureSpi.h \
+UnrecoverableKeyException.h
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/security/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/security/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxsecurity.la: $(libcxxsecurity_la_OBJECTS) $(libcxxsecurity_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxsecurity_la_LDFLAGS) $(libcxxsecurity_la_OBJECTS) $(libcxxsecurity_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxsecurityHEADERS: $(cxxsecurity_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxsecuritydir)" || $(mkdir_p) "$(DESTDIR)$(cxxsecuritydir)"
+ @list='$(cxxsecurity_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxsecurityHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxsecuritydir)/$$f'"; \
+ $(cxxsecurityHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxsecuritydir)/$$f"; \
+ done
+
+uninstall-cxxsecurityHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxsecurity_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxsecuritydir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxsecuritydir)/$$f"; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if (etags --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ else \
+ include_option=--include; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || mkdir "$(distdir)/$$subdir" \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="../$(top_distdir)" \
+ distdir="../$(distdir)/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(cxxsecuritydir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-cxxsecurityHEADERS
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-cxxsecurityHEADERS uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ clean-recursive ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am \
+ install-cxxsecurityHEADERS install-data install-data-am \
+ install-exec install-exec-am install-info install-info-am \
+ install-man install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-cxxsecurityHEADERS uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/MessageDigest.h"
+#include "beecrypt/c++/security/Security.h"
+
+using namespace beecrypt::security;
+
+MessageDigest::MessageDigest(MessageDigestSpi* spi, const String& algorithm, const Provider& provider)
+{
+ _mspi = spi;
+ _algo = algorithm;
+ _prov = &provider;
+}
+
+MessageDigest::~MessageDigest()
+{
+ delete _mspi;
+}
+
+MessageDigest* MessageDigest::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "MessageDigest");
+
+ MessageDigest* result = new MessageDigest((MessageDigestSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+MessageDigest* MessageDigest::getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "MessageDigest", provider);
+
+ MessageDigest* result = new MessageDigest((MessageDigestSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+MessageDigest* MessageDigest::getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "MessageDigest", provider);
+
+ MessageDigest* result = new MessageDigest((MessageDigestSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+MessageDigest* MessageDigest::clone() const
+{
+ MessageDigestSpi* _mspc = _mspi->clone();
+
+ if (_mspc)
+ return new MessageDigest(_mspc, _algo, *_prov);
+ else
+ return 0;
+}
+
+const bytearray& MessageDigest::digest()
+{
+ return _mspi->engineDigest();
+}
+
+const bytearray& MessageDigest::digest(const bytearray& b)
+{
+ _mspi->engineUpdate(b.data(), 0, b.size());
+ return _mspi->engineDigest();
+}
+
+size_t MessageDigest::digest(byte* data, size_t offset, size_t length) throw (ShortBufferException)
+{
+ return _mspi->engineDigest(data, offset, length);
+}
+
+size_t MessageDigest::getDigestLength()
+{
+ return _mspi->engineGetDigestLength();
+}
+
+void MessageDigest::reset()
+{
+ _mspi->engineReset();
+}
+
+void MessageDigest::update(byte b)
+{
+ _mspi->engineUpdate(b);
+}
+
+void MessageDigest::update(const bytearray& b)
+{
+ _mspi->engineUpdate(b.data(), 0, b.size());
+}
+
+void MessageDigest::update(const byte* data, size_t offset, size_t length)
+{
+ _mspi->engineUpdate(data, offset, length);
+}
+
+const String& MessageDigest::getAlgorithm() const throw ()
+{
+ return _algo;
+}
+
+const Provider& MessageDigest::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file MessageDigest.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_MESSAGEDIGEST_H
+#define _CLASS_MESSAGEDIGEST_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/MessageDigestSpi.h"
+using beecrypt::security::MessageDigestSpi;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI MessageDigest
+ {
+ public:
+ static MessageDigest* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static MessageDigest* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static MessageDigest* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ private:
+ MessageDigestSpi* _mspi;
+ String _algo;
+ const Provider* _prov;
+
+ protected:
+ MessageDigest(MessageDigestSpi*, const String&, const Provider&);
+
+ public:
+ ~MessageDigest();
+
+ MessageDigest* clone() const;
+
+ const bytearray& digest();
+ const bytearray& digest(const bytearray&);
+ size_t digest(byte* data, size_t offset, size_t length) throw (ShortBufferException);
+ size_t getDigestLength();
+ void reset();
+ void update(byte);
+ void update(const byte* data, size_t offset, size_t length);
+ void update(const bytearray& b);
+
+ const String& getAlgorithm() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file MessageDigestSpi.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_MESSAGEDIGESTSPI_H
+#define _CLASS_MESSAGEDIGESTSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/security/ShortBufferException.h"
+using beecrypt::security::ShortBufferException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI MessageDigestSpi
+ {
+ friend class MessageDigest;
+
+ protected:
+ virtual const bytearray& engineDigest() = 0;
+ virtual size_t engineDigest(byte*, size_t, size_t) throw (ShortBufferException) = 0;
+ virtual size_t engineGetDigestLength() = 0;
+ virtual void engineReset() = 0;
+ virtual void engineUpdate(byte) = 0;
+ virtual void engineUpdate(const byte*, size_t, size_t) = 0;
+
+ public:
+ virtual ~MessageDigestSpi() {};
+
+ virtual MessageDigestSpi* clone() const = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+
+using namespace beecrypt::security;
+
+NoSuchAlgorithmException::NoSuchAlgorithmException() throw ()
+{
+}
+
+NoSuchAlgorithmException::NoSuchAlgorithmException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file NoSuchAlgorithmException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_NOSUCHALGORITHMEXCEPTION_H
+#define _CLASS_NOSUCHALGORITHMEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI NoSuchAlgorithmException : public GeneralSecurityException
+ {
+ public:
+ NoSuchAlgorithmException() throw ();
+ NoSuchAlgorithmException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+
+using namespace beecrypt::security;
+
+NoSuchProviderException::NoSuchProviderException() throw ()
+{
+}
+
+NoSuchProviderException::NoSuchProviderException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file NoSuchProviderException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_NOSUCHPROVIDEREXCEPTION_H
+#define _CLASS_NOSUCHPROVIDEREXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI NoSuchProviderException : public GeneralSecurityException
+ {
+ public:
+ NoSuchProviderException() throw ();
+ NoSuchProviderException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PrivateKey.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _INTERFACE_PRIVATEKEY_H
+#define _INTERFACE_PRIVATEKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/Key.h"
+using beecrypt::security::Key;
+
+namespace beecrypt {
+ namespace security {
+ /*!\brief PrivateKey interface
+ * \ingroup CXX_IF_m
+ */
+ class PrivateKey : public Key
+ {
+ public:
+ virtual PrivateKey* clone() const = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/Provider.h"
+
+using namespace beecrypt::security;
+
+Provider::Provider(const String& name, double version, const String& info)
+{
+ _name = name;
+ _info = info;
+ _vers = version;
+
+ _lock.init();
+
+ UErrorCode status = U_ZERO_ERROR;
+
+ _conv = ucnv_open(NULL, &status);
+ if (U_FAILURE(status))
+ throw "failed to create default unicode converter";
+
+ #if WIN32
+ _dlhandle = NULL;
+ #else
+ _dlhandle = RTLD_DEFAULT;
+ #endif
+}
+
+Provider::~Provider()
+{
+ _lock.destroy();
+
+ ucnv_close(_conv);
+}
+
+Provider::instantiator Provider::getInstantiator(const String& key) const
+{
+ instantiator_map::const_iterator it = _imap.find(key);
+
+ if (it != _imap.end())
+ return it->second;
+ else
+ return 0;
+}
+
+void Provider::put(const String& key, const String& value)
+{
+ _lock.lock();
+
+ // add it in the properties
+ setProperty(key, value);
+
+ // add it in the instantiator map only if there is no space in the value (i.e. it's a property instead of a class)
+ if (value.indexOf((UChar) 0x20) == -1)
+ {
+ char symname[1024];
+
+ UErrorCode status = U_ZERO_ERROR;
+
+ ucnv_fromUChars(_conv, symname, 1024, value.getBuffer(), value.length(), &status);
+
+ if (status != U_ZERO_ERROR)
+ {
+ _lock.unlock();
+ throw "error in ucnv_fromUChars";
+ }
+
+ instantiator i;
+
+ #if WIN32
+ if (!_dlhandle)
+ _dlhandle = GetModuleHandle(NULL);
+ i = (instantiator) GetProcAddress((HMODULE) _dlhandle, symname);
+ #elif HAVE_DLFCN_H
+ i = (instantiator) dlsym(_dlhandle, symname);
+ #else
+ # error
+ #endif
+
+ _imap[key] = i;
+ }
+ else
+ _imap[key] = 0;
+
+ _lock.unlock();
+}
+
+const String& Provider::getInfo() const throw ()
+{
+ return _info;
+}
+
+const String& Provider::getName() const throw ()
+{
+ return _name;
+}
+
+double Provider::getVersion() const throw ()
+{
+ return _vers;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Provider.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_PROVIDER_H
+#define _CLASS_PROVIDER_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/mutex.h"
+using beecrypt::mutex;
+#include "beecrypt/c++/lang/String.h"
+using beecrypt::lang::String;
+#include "beecrypt/c++/util/Properties.h"
+using beecrypt::util::Properties;
+
+#include <unicode/ucnv.h>
+#include <map>
+using std::map;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI Provider : public Properties
+ {
+ friend class Security;
+
+ private:
+ String _name;
+ String _info;
+ double _vers;
+
+ mutex _lock;
+ UConverter* _conv;
+
+ typedef void* (*instantiator)();
+ typedef map<String,instantiator> instantiator_map;
+
+ instantiator_map _imap;
+
+ instantiator getInstantiator(const String& name) const;
+
+ protected:
+ #if WIN32
+ HANDLE _dlhandle;
+ #else
+ void* _dlhandle;
+ #endif
+
+ Provider(const String& name, double version, const String& info);
+
+ public:
+ virtual ~Provider();
+
+ void put(const String& key, const String& value);
+
+ const String& getName() const throw ();
+ const String& getInfo() const throw ();
+ double getVersion() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file PublicKey.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _INTERFACE_PUBLICKEY_H
+#define _INTERFACE_PUBLICKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/Key.h"
+using beecrypt::security::Key;
+
+namespace beecrypt {
+ namespace security {
+ /*!\brief Public key interface.
+ * \ingroup CXX_IF_m
+ */
+ class PublicKey : public Key
+ {
+ public:
+ virtual PublicKey* clone() const = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/SecureRandom.h"
+#include "beecrypt/c++/security/SecureRandomSpi.h"
+#include "beecrypt/c++/security/Security.h"
+
+using namespace beecrypt::security;
+
+SecureRandom* SecureRandom::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "SecureRandom");
+
+ SecureRandom* result = new SecureRandom((SecureRandomSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+SecureRandom* SecureRandom::getInstance(const String& type, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(type, "SecureRandom", provider);
+
+ SecureRandom* result = new SecureRandom((SecureRandomSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+SecureRandom* SecureRandom::getInstance(const String& type, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(type, "SecureRandom", provider);
+
+ SecureRandom* result = new SecureRandom((SecureRandomSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+void SecureRandom::getSeed(byte* data, size_t size)
+{
+ entropyGatherNext(data, size);
+}
+
+SecureRandom::SecureRandom()
+{
+ Security::spi* tmp = Security::getFirstSpi("SecureRandom");
+
+ _rspi = (SecureRandomSpi*) tmp->cspi;
+ _type = tmp->name;
+ _prov = &tmp->prov;
+
+ delete tmp;
+}
+
+SecureRandom::SecureRandom(SecureRandomSpi* rspi, const String& type, const Provider& provider) : _prov(&provider)
+{
+ _rspi = rspi;
+ _type = type;
+ _prov = &provider;
+}
+
+SecureRandom::~SecureRandom()
+{
+ delete _rspi;
+}
+
+void SecureRandom::generateSeed(byte* data, size_t size)
+{
+ _rspi->engineGenerateSeed(data, size);
+}
+
+void SecureRandom::setSeed(const byte* data, size_t size)
+{
+ _rspi->engineSetSeed(data, size);
+}
+
+void SecureRandom::nextBytes(byte* data, size_t size)
+{
+ _rspi->engineNextBytes(data, size);
+}
+
+const String& SecureRandom::getType() const throw ()
+{
+ return _type;
+}
+
+const Provider& SecureRandom::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SecureRandom.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_SECURERANDOM_H
+#define _CLASS_SECURERANDOM_H
+
+#include "beecrypt/beecrypt.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/SecureRandomSpi.h"
+using beecrypt::security::SecureRandomSpi;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI SecureRandom
+ {
+ public:
+ static SecureRandom* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static SecureRandom* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static SecureRandom* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ static void getSeed(byte*, size_t);
+
+ private:
+ SecureRandomSpi* _rspi;
+ String _type;
+ const Provider* _prov;
+
+ protected:
+ SecureRandom(SecureRandomSpi*, const String&, const Provider&);
+
+ public:
+ SecureRandom();
+ ~SecureRandom();
+
+ void generateSeed(byte*, size_t);
+ void nextBytes(byte*, size_t);
+ void setSeed(const byte*, size_t);
+
+ const String& getType() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SecureRandomSpi.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_SECURERANDOMSPI_H
+#define _CLASS_SECURERANDOMSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI SecureRandomSpi
+ {
+ friend class SecureRandom;
+
+ protected:
+ virtual void engineGenerateSeed(byte*, size_t) = 0;
+ virtual void engineNextBytes(byte*, size_t) = 0;
+ virtual void engineSetSeed(const byte*, size_t) = 0;
+
+ public:
+ virtual ~SecureRandomSpi() {};
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/resource.h"
+#include "beecrypt/c++/security/Security.h"
+#include "beecrypt/c++/io/FileInputStream.h"
+using beecrypt::io::FileInputStream;
+
+#include <iostream>
+#include <unicode/ustream.h>
+
+using namespace beecrypt::security;
+
+namespace {
+ const String KEYSTORE_DEFAULT_TYPE = UNICODE_STRING_SIMPLE("BEE");
+}
+
+bool Security::_init = false;
+mutex Security::_lock;
+Properties Security::_props;
+Security::provider_vector Security::_providers;
+
+/* Have to use lazy initialization here; static initialization doesn't work.
+ * Initialization adds a provider, apparently in another copy of Security,
+ * instead of where we would expect it.
+ *
+ * Don't dlclose the libraries or uninstall the providers. They'll
+ * disappear when the program closes. Since this happens only once per
+ * application which uses this library, that's acceptable.
+ *
+ * What we eventually need to do is the following:
+ * - treat the beecrypt.conf file as a collection of Properties, loaded from
+ * file with loadProperties.
+ * - get appropriate properties to do the initialization
+ */
+
+void Security::initialize()
+{
+ _lock.init();
+ _lock.lock();
+ _init = true;
+ _lock.unlock();
+
+ /* get the configuration file here and load providers */
+ const char* path = getenv("BEECRYPT_CONF_FILE");
+
+ FILE* props;
+
+ if (path)
+ props = fopen(path, "r");
+ else
+ props = fopen(BEECRYPT_CONF_FILE, "r");
+
+ if (!props)
+ {
+ std::cerr << "couldn't open beecrypt configuration file" << std::endl;
+ }
+ else
+ {
+ FileInputStream fis(props);
+
+ try
+ {
+ // load properties from fis
+ _props.load(fis);
+
+ for (int32_t index = 1; true; index++)
+ {
+ char num[32];
+
+ sprintf(num, "provider.%d", index);
+
+ String key(num);
+
+ const String* value = _props.getProperty(key);
+
+ if (value)
+ {
+ int32_t reqlen = value->extract(0, value->length(), (char*) 0, (const char*) 0);
+
+ char* shared_library = new char[reqlen+1];
+
+ value->extract(0, value->length(), shared_library, (const char*) 0);
+
+ #if WIN32
+ HANDLE handle = LoadLibraryEx(shared_library, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
+ #elif HAVE_DLFCN_H
+ void *handle = dlopen(shared_library, RTLD_NOW);
+ #else
+ # error
+ #endif
+
+ if (handle)
+ {
+ #if WIN32
+ const Provider& (*inst)(void*) = (const Provider& (*)(void*)) GetProcAddress((HMODULE) handle, "provider_const_ref");
+ #elif HAVE_PTHREAD_H
+ const Provider& (*inst)(void*) = (const Provider& (*)(void*)) dlsym(handle, "provider_const_ref");
+ #else
+ # error
+ #endif
+
+ if (inst)
+ {
+ addProvider(inst(handle));
+ }
+ else
+ {
+ std::cerr << "library doesn't contain symbol provider_const_ref" << std::endl;
+ #if HAVE_DLFCN_H
+ std::cerr << "dlerror: " << dlerror() << std::endl;
+ #endif
+ }
+ }
+ else
+ {
+ std::cerr << "unable to open shared library " << shared_library << std::endl;
+ #if HAVE_DLFCN_H
+ std::cerr << "dlerror: " << dlerror() << std::endl;
+ #endif
+ }
+
+ delete[] shared_library;
+ }
+ else
+ break;
+ }
+ }
+ catch (IOException)
+ {
+ }
+ }
+}
+
+Security::spi::spi(void* cspi, const String& name, const Provider& prov) : cspi(cspi), name(name), prov(prov)
+{
+}
+
+Security::spi* Security::getSpi(const String& name, const String& type) throw (NoSuchAlgorithmException)
+{
+ if (!_init)
+ initialize();
+
+ String afind = type + "." + name;
+ String alias = "Alg.Alias." + type + "." + name;
+
+ _lock.lock();
+ for (size_t i = 0; i < _providers.size(); i++)
+ {
+ Provider::instantiator inst = 0;
+
+ const Provider* p = _providers[i];
+
+ if (p->getProperty(afind))
+ {
+ inst = p->getInstantiator(afind);
+ }
+ else
+ {
+ const String* alias_of = p->getProperty(alias);
+
+ if (alias_of)
+ inst = p->getInstantiator(*alias_of);
+ }
+
+ if (inst)
+ {
+ register spi* result = new spi(inst(), name, *p);
+ _lock.unlock();
+ return result;
+ }
+ }
+
+ _lock.unlock();
+
+ throw NoSuchAlgorithmException(name + " " + type + " not available");
+}
+
+Security::spi* Security::getSpi(const String& name, const String& type, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ if (!_init)
+ initialize();
+
+ String afind = type + "." + name;
+ String alias = "Alg.Alias." + type + "." + name;
+
+ _lock.lock();
+ for (size_t i = 0; i < _providers.size(); i++)
+ {
+ const Provider* p = _providers[i];
+
+ if (p->getName() == provider)
+ {
+ Provider::instantiator inst = 0;
+
+ const Provider* p = _providers[i];
+
+ if (p->getProperty(afind))
+ {
+ inst = p->getInstantiator(afind);
+ }
+ else
+ {
+ const String* alias_of = p->getProperty(alias);
+
+ if (alias_of)
+ inst = p->getInstantiator(*alias_of);
+ }
+
+ if (inst)
+ {
+ register spi* result = new spi(inst(), name, *p);
+ _lock.unlock();
+ return result;
+ }
+
+ _lock.unlock();
+
+ throw NoSuchAlgorithmException(name + " " + type + " not available");
+ }
+ }
+
+ _lock.unlock();
+
+ throw NoSuchProviderException(provider + " Provider not available");
+}
+
+Security::spi* Security::getSpi(const String& name, const String& type, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ if (!_init)
+ initialize();
+
+ String afind = type + "." + name;
+ String alias = "Alg.Alias." + type + "." + name;
+
+ Provider::instantiator inst = 0;
+
+ if (provider.getProperty(afind))
+ {
+ inst = provider.getInstantiator(afind);
+ }
+ else
+ {
+ const String* alias_of = provider.getProperty(alias);
+
+ if (alias_of)
+ inst = provider.getInstantiator(*alias_of);
+ }
+
+ if (inst)
+ return new spi(inst(), name, provider);
+
+ throw NoSuchAlgorithmException(name + " " + type + " not available");
+}
+
+Security::spi* Security::getFirstSpi(const String& type)
+{
+ if (!_init)
+ initialize();
+
+ String afind = type + ".";
+
+ for (size_t i = 0; i < _providers.size(); i++)
+ {
+ const Provider* p = _providers[i];
+
+ Enumeration* e = p->propertyNames();
+
+ while (e->hasMoreElements())
+ {
+ const String* s = (const String*) e->nextElement();
+
+ if (s->startsWith(afind))
+ {
+ String name;
+
+ name.setTo(*s, afind.length());
+
+ Provider::instantiator inst = p->getInstantiator(*s);
+
+ if (inst)
+ {
+ delete e;
+
+ return new spi(inst(), name, *p);
+ }
+ }
+ }
+
+ delete e;
+ }
+ return 0;
+}
+
+const String& Security::getKeyStoreDefault()
+{
+ return *_props.getProperty("keystore.default", KEYSTORE_DEFAULT_TYPE);
+}
+
+int Security::addProvider(const Provider& provider)
+{
+ if (!_init)
+ initialize();
+
+ if (getProvider(provider.getName()))
+ return -1;
+
+ _lock.lock();
+
+ size_t rc = (int) _providers.size();
+
+ _providers.push_back(&provider);
+
+ _lock.unlock();
+
+ return rc;
+}
+
+int Security::insertProviderAt(const Provider& provider, size_t position)
+{
+ if (!_init)
+ initialize();
+
+ if (getProvider(provider.getName()))
+ return -1;
+
+ _lock.lock();
+
+ size_t size = _providers.size();
+
+ if (position > size || position <= 0)
+ position = size+1;
+
+ _providers.insert(_providers.begin()+position-1, &provider);
+
+ _lock.unlock();
+
+ return (int) position;
+}
+
+void Security::removeProvider(const String& name)
+{
+ if (!_init)
+ initialize();
+
+ _lock.lock();
+ for (provider_vector_iterator it = _providers.begin(); it != _providers.end(); it++)
+ {
+ const Provider* p = *it;
+
+ if (p->getName() == name)
+ {
+ _providers.erase(it);
+ _lock.unlock();
+ return;
+ }
+ }
+ _lock.unlock();
+}
+
+const Security::provider_vector& Security::getProviders()
+{
+ if (!_init)
+ initialize();
+
+ return _providers;
+}
+
+const Provider* Security::getProvider(const String& name)
+{
+ if (!_init)
+ initialize();
+
+ for (size_t i = 0; i < _providers.size(); i++)
+ {
+ const Provider* tmp = _providers[i];
+
+ if (tmp->getName() == name)
+ return _providers[i];
+ }
+
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Security.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_SECURITY_H
+#define _CLASS_SECURITY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/mutex.h"
+using beecrypt::mutex;
+#include "beecrypt/c++/util/Properties.h"
+using beecrypt::util::Properties;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+#include "beecrypt/c++/security/cert/CertificateFactory.h"
+using beecrypt::security::cert::CertificateFactory;
+#include "beecrypt/c++/crypto/Mac.h"
+using beecrypt::crypto::Mac;
+#include "beecrypt/c++/crypto/SecretKeyFactory.h"
+using beecrypt::crypto::SecretKeyFactory;
+
+#include <vector>
+using std::vector;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI Security
+ {
+ friend class AlgorithmParameterGenerator;
+ friend class AlgorithmParameters;
+ friend class CertificateFactory;
+ friend class KeyFactory;
+ friend class KeyPairGenerator;
+ friend class KeyStore;
+ friend class Mac;
+ friend class MessageDigest;
+ friend class SecretKeyFactory;
+ friend class SecureRandom;
+ friend class Signature;
+
+ public:
+ typedef vector<const Provider*> provider_vector;
+ typedef provider_vector::iterator provider_vector_iterator;
+
+ private:
+ struct spi
+ {
+ void* cspi;
+ String name;
+ const Provider& prov;
+
+ spi(void* cspi, const String&, const Provider&);
+ };
+
+ static spi* getSpi(const String& name, const String& type) throw (NoSuchAlgorithmException);
+ static spi* getSpi(const String& algo, const String& type, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static spi* getSpi(const String& algo, const String& type, const Provider&) throw (NoSuchAlgorithmException);
+ static spi* getFirstSpi(const String& type);
+
+ static const String& getKeyStoreDefault();
+
+ static bool _init;
+ static Properties _props;
+ static mutex _lock;
+ static provider_vector _providers;
+
+ static void initialize();
+
+ public:
+ static int addProvider(const Provider& provider);
+ static int insertProviderAt(const Provider& provider, size_t position);
+ static void removeProvider(const String& name);
+ static const Provider* getProvider(const String& name);
+ static const provider_vector& getProviders();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/ShortBufferException.h"
+
+using namespace beecrypt::security;
+
+ShortBufferException::ShortBufferException() throw ()
+{
+}
+
+ShortBufferException::ShortBufferException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file ShortBufferException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_SHORTBUFFEREXCEPTION_H
+#define _CLASS_SHORTBUFFEREXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI ShortBufferException : public GeneralSecurityException
+ {
+ public:
+ ShortBufferException() throw ();
+ ShortBufferException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/Signature.h"
+#include "beecrypt/c++/security/Security.h"
+
+using namespace beecrypt::security;
+
+Signature::Signature(SignatureSpi* spi, const String& algorithm, const Provider& provider)
+{
+ _sspi = spi;
+ _algo = algorithm;
+ _prov = &provider;
+}
+
+Signature::~Signature()
+{
+ delete _sspi;
+}
+
+Signature* Signature::getInstance(const String& algorithm) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "Signature");
+
+ Signature* result = new Signature((SignatureSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+Signature* Signature::getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "Signature", provider);
+
+ Signature* result = new Signature((SignatureSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+Signature* Signature::getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(algorithm, "Signature", provider);
+
+ Signature* result = new Signature((SignatureSpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+AlgorithmParameters* Signature::getParameters() const
+{
+ return _sspi->engineGetParameters();
+}
+
+void Signature::setParameter(const AlgorithmParameterSpec& spec) throw (InvalidAlgorithmParameterException)
+{
+ _sspi->engineSetParameter(spec);
+}
+
+void Signature::initSign(const PrivateKey& key) throw (InvalidKeyException)
+{
+ _sspi->engineInitSign(key, (SecureRandom*) 0);
+
+ state = SIGN;
+}
+
+void Signature::initSign(const PrivateKey& key, SecureRandom* random) throw (InvalidKeyException)
+{
+ _sspi->engineInitSign(key, random);
+
+ state = SIGN;
+}
+
+void Signature::initVerify(const PublicKey& key) throw (InvalidKeyException)
+{
+ _sspi->engineInitVerify(key);
+
+ state = VERIFY;
+}
+
+bytearray* Signature::sign() throw (IllegalStateException, SignatureException)
+{
+ if (state != SIGN)
+ throw IllegalStateException("object not initialized for signing");
+
+ return _sspi->engineSign();
+}
+
+size_t Signature::sign(byte* outbuf, size_t offset, size_t len) throw (ShortBufferException, IllegalStateException, SignatureException)
+{
+ if (state != SIGN)
+ throw IllegalStateException("object not initialized for signing");
+
+ return _sspi->engineSign(outbuf, offset, len);
+}
+
+size_t Signature::sign(bytearray& out) throw (IllegalStateException, SignatureException)
+{
+ if (state != SIGN)
+ throw IllegalStateException("object not initialized for signing");
+
+ return _sspi->engineSign(out);
+}
+
+bool Signature::verify(const bytearray& signature) throw (IllegalStateException, SignatureException)
+{
+ return verify(signature.data(), 0, signature.size());
+}
+
+bool Signature::verify(const byte* signature, size_t offset, size_t len) throw (IllegalStateException, SignatureException)
+{
+ if (state != VERIFY)
+ throw IllegalStateException("object not initialized for verification");
+
+ return _sspi->engineVerify(signature, offset, len);
+}
+
+void Signature::update(byte b) throw (IllegalStateException)
+{
+ if (state == UNINITIALIZED)
+ throw IllegalStateException("object not initialized for signing or verification");
+
+ _sspi->engineUpdate(b);
+}
+
+void Signature::update(const byte* data, size_t offset, size_t len) throw (IllegalStateException)
+{
+ if (state == UNINITIALIZED)
+ throw IllegalStateException("object not initialized for signing or verification");
+
+ _sspi->engineUpdate(data, offset, len);
+}
+
+void Signature::update(const bytearray& b) throw (IllegalStateException)
+{
+ update(b.data(), 0, b.size());
+}
+
+const String& Signature::getAlgorithm() const throw ()
+{
+ return _algo;
+}
+
+const Provider& Signature::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Signature.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_SIGNATURE_H
+#define _CLASS_SIGNATURE_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/SignatureSpi.h"
+using beecrypt::security::SignatureSpi;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI Signature
+ {
+ protected:
+ static const int UNINITIALIZED = 0;
+ static const int VERIFY = 1;
+ static const int SIGN = 2;
+
+ public:
+ static Signature* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static Signature* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static Signature* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ protected:
+ int state;
+
+ private:
+ SignatureSpi* _sspi;
+ String _algo;
+ const Provider* _prov;
+
+ protected:
+ Signature(SignatureSpi*, const String&, const Provider&);
+
+ public:
+ ~Signature();
+
+ AlgorithmParameters* getParameters() const;
+ void setParameter(const AlgorithmParameterSpec&) throw (InvalidAlgorithmParameterException);
+
+ void initSign(const PrivateKey&) throw (InvalidKeyException);
+ void initSign(const PrivateKey&, SecureRandom*) throw (InvalidKeyException);
+
+ void initVerify(const PublicKey&) throw (InvalidKeyException);
+
+ bytearray* sign() throw (IllegalStateException, SignatureException);
+ size_t sign(byte*, size_t, size_t) throw (ShortBufferException, IllegalStateException, SignatureException);
+ size_t sign(bytearray&) throw (IllegalStateException, SignatureException);
+ bool verify(const bytearray&) throw (IllegalStateException, SignatureException);
+ bool verify(const byte*, size_t, size_t) throw (IllegalStateException, SignatureException);
+
+ void update(byte) throw (IllegalStateException);
+ void update(const byte*, size_t, size_t) throw (IllegalStateException);
+ void update(const bytearray&) throw (IllegalStateException);
+
+ const String& getAlgorithm() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/SignatureException.h"
+
+using namespace beecrypt::security;
+
+SignatureException::SignatureException() throw ()
+{
+}
+
+SignatureException::SignatureException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SignatureException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_SIGNATUREEXCEPTION_H
+#define _CLASS_SIGNATUREEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI SignatureException : public GeneralSecurityException
+ {
+ public:
+ SignatureException() throw ();
+ SignatureException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file SignatureSpi.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_SIGNATURESPI_H
+#define _CLASS_SIGNATURESPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/lang/IllegalStateException.h"
+using beecrypt::lang::IllegalStateException;
+#include "beecrypt/c++/security/AlgorithmParameters.h"
+using beecrypt::security::AlgorithmParameters;
+#include "beecrypt/c++/security/PrivateKey.h"
+using beecrypt::security::PrivateKey;
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+#include "beecrypt/c++/security/SecureRandom.h"
+using beecrypt::security::SecureRandom;
+#include "beecrypt/c++/security/InvalidAlgorithmParameterException.h"
+using beecrypt::security::InvalidAlgorithmParameterException;
+#include "beecrypt/c++/security/InvalidKeyException.h"
+using beecrypt::security::InvalidKeyException;
+#include "beecrypt/c++/security/ShortBufferException.h"
+using beecrypt::security::ShortBufferException;
+#include "beecrypt/c++/security/SignatureException.h"
+using beecrypt::security::SignatureException;
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI SignatureSpi
+ {
+ friend class Signature;
+
+ protected:
+ virtual AlgorithmParameters* engineGetParameters() const = 0;
+ virtual void engineSetParameter(const AlgorithmParameterSpec&) throw (InvalidAlgorithmParameterException) = 0;
+
+ virtual void engineInitSign(const PrivateKey&, SecureRandom*) throw (InvalidKeyException) = 0;
+
+ virtual void engineInitVerify(const PublicKey&) = 0;
+
+ virtual void engineUpdate(byte) = 0;
+ virtual void engineUpdate(const byte*, size_t, size_t) = 0;
+
+ virtual bytearray* engineSign() throw (SignatureException) = 0;
+ virtual size_t engineSign(byte*, size_t, size_t) throw (ShortBufferException, SignatureException) = 0;
+ virtual size_t engineSign(bytearray&) throw (SignatureException) = 0;
+ virtual bool engineVerify(const byte*, size_t, size_t) throw (SignatureException) = 0;
+
+ public:
+ virtual ~SignatureSpi() {};
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/UnrecoverableKeyException.h"
+
+using namespace beecrypt::security;
+
+UnrecoverableKeyException::UnrecoverableKeyException() throw ()
+{
+}
+
+UnrecoverableKeyException::UnrecoverableKeyException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file UnrecoverableKeyException.h
+ * \ingroup CXX_SECURITY_m
+ */
+
+#ifndef _CLASS_UNRECOVERABLEKEYEXCEPTION_H
+#define _CLASS_UNRECOVERABLEKEYEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ class BEECRYPTCXXAPI UnrecoverableKeyException : public GeneralSecurityException
+ {
+ public:
+ UnrecoverableKeyException() throw ();
+ UnrecoverableKeyException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/cert/Certificate.h"
+
+using namespace beecrypt::security::cert;
+
+Certificate::Certificate(const String& type)
+{
+ _type = type;
+}
+
+Certificate::~Certificate()
+{
+}
+
+bool Certificate::operator==(const Certificate& cmp) const
+{
+ if (this == &cmp)
+ return true;
+
+ if (_type != cmp._type)
+ return false;
+
+ if (getEncoded() != cmp.getEncoded())
+ return false;
+
+ return true;
+}
+
+const String& Certificate::getType() const throw ()
+{
+ return _type;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Certificate.h
+ * \ingroup CXX_SECURITY_CERT_m
+ */
+
+#ifndef _CLASS_CERTIFICATE_H
+#define _CLASS_CERTIFICATE_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::array;
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+#include "beecrypt/c++/security/InvalidKeyException.h"
+using beecrypt::security::InvalidKeyException;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/NoSuchProviderException.h"
+using beecrypt::security::NoSuchProviderException;
+#include "beecrypt/c++/security/SignatureException.h"
+using beecrypt::security::SignatureException;
+#include "beecrypt/c++/security/cert/CertificateException.h"
+using beecrypt::security::cert::CertificateException;
+
+namespace beecrypt {
+ namespace security {
+ namespace cert {
+ class BEECRYPTCXXAPI Certificate
+ {
+ private:
+ String _type;
+
+ protected:
+ Certificate(const String& type);
+
+ public:
+ virtual ~Certificate();
+
+ virtual bool operator==(const Certificate&) const;
+
+ virtual Certificate* clone() const = 0;
+
+ virtual const bytearray& getEncoded() const = 0;
+ virtual const PublicKey& getPublicKey() const = 0;
+
+ virtual void verify(const PublicKey&) throw (CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException) = 0;
+ virtual void verify(const PublicKey&, const String&) throw (CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException) = 0;
+
+ virtual const String& toString() const throw () = 0;
+
+ const String& getType() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/cert/CertificateException.h"
+
+using namespace beecrypt::security::cert;
+
+CertificateException::CertificateException() throw ()
+{
+}
+
+CertificateException::CertificateException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file CertificateException.h
+ * \ingroup CXX_SECURITY_CERT_m
+ */
+
+#ifndef _CLASS_CERTIFICATEEXCEPTION_H
+#define _CLASS_CERTIFICATEEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ namespace cert {
+ class BEECRYPTCXXAPI CertificateException : public GeneralSecurityException
+ {
+ public:
+ CertificateException() throw ();
+ CertificateException(const String&) throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/cert/CertificateExpiredException.h"
+
+using namespace beecrypt::security::cert;
+
+CertificateExpiredException::CertificateExpiredException() throw ()
+{
+}
+
+CertificateExpiredException::CertificateExpiredException(const String& message) throw () : CertificateException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file CertificateExpiredException.h
+ * \ingroup CXX_SECURITY_CERT_m
+ */
+
+#ifndef _CLASS_CERTIFICATEEXPIREDEXCEPTION_H
+#define _CLASS_CERTIFICATEEXPIREDEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/cert/CertificateException.h"
+using beecrypt::security::cert::CertificateException;
+
+namespace beecrypt {
+ namespace security {
+ namespace cert {
+ class BEECRYPTCXXAPI CertificateExpiredException : public CertificateException
+ {
+ public:
+ CertificateExpiredException() throw ();
+ CertificateExpiredException(const String&) throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/Security.h"
+#include "beecrypt/c++/security/cert/CertificateFactory.h"
+
+using namespace beecrypt::security::cert;
+
+CertificateFactory::CertificateFactory(CertificateFactorySpi* spi, const String& type, const Provider& provider)
+{
+ _cspi = spi;
+ _type = type;
+ _prov = &provider;
+}
+
+CertificateFactory::~CertificateFactory()
+{
+ delete _cspi;
+}
+
+CertificateFactory* CertificateFactory::getInstance(const String& type) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(type, "CertificateFactory");
+
+ CertificateFactory* result = new CertificateFactory((CertificateFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+CertificateFactory* CertificateFactory::getInstance(const String& type, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException)
+{
+ Security::spi* tmp = Security::getSpi(type, "CertificateFactory", provider);
+
+ CertificateFactory* result = new CertificateFactory((CertificateFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+CertificateFactory* CertificateFactory::getInstance(const String& type, const Provider& provider) throw (NoSuchAlgorithmException)
+{
+ Security::spi* tmp = Security::getSpi(type, "CertificateFactory", provider);
+
+ CertificateFactory* result = new CertificateFactory((CertificateFactorySpi*) tmp->cspi, tmp->name, tmp->prov);
+
+ delete tmp;
+
+ return result;
+}
+
+Certificate* CertificateFactory::generateCertificate(InputStream& in) throw (CertificateException)
+{
+ return _cspi->engineGenerateCertificate(in);
+}
+
+vector<Certificate*>* CertificateFactory::generateCertificates(InputStream& in) throw (CertificateException)
+{
+ return _cspi->engineGenerateCertificates(in);
+}
+
+const String& CertificateFactory::getType() const throw ()
+{
+ return _type;
+}
+
+const Provider& CertificateFactory::getProvider() const throw ()
+{
+ return *_prov;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file CertificateFactory.h
+ * \ingroup CXX_SECURITY_CERT_m
+ */
+
+#ifndef _CLASS_CERTIFICATEFACTORY_H
+#define _CLASS_CERTIFICATEFACTORY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/String.h"
+using beecrypt::lang::String;
+#include "beecrypt/c++/security/Provider.h"
+using beecrypt::security::Provider;
+#include "beecrypt/c++/security/NoSuchAlgorithmException.h"
+using beecrypt::security::NoSuchAlgorithmException;
+#include "beecrypt/c++/security/cert/Certificate.h"
+using beecrypt::security::cert::Certificate;
+#include "beecrypt/c++/security/cert/CertificateFactorySpi.h"
+using beecrypt::security::cert::CertificateFactorySpi;
+
+#include <vector>
+using std::vector;
+
+namespace beecrypt {
+ namespace security {
+ namespace cert {
+ class BEECRYPTCXXAPI CertificateFactory
+ {
+ public:
+ static CertificateFactory* getInstance(const String&) throw (NoSuchAlgorithmException);
+ static CertificateFactory* getInstance(const String&, const String&) throw (NoSuchAlgorithmException, NoSuchProviderException);
+ static CertificateFactory* getInstance(const String&, const Provider&) throw (NoSuchAlgorithmException);
+
+ private:
+ CertificateFactorySpi* _cspi;
+ String _type;
+ const Provider* _prov;
+
+ protected:
+ CertificateFactory(CertificateFactorySpi*, const String&, const Provider&);
+
+ public:
+ ~CertificateFactory();
+
+ Certificate* generateCertificate(InputStream& in) throw (CertificateException);
+ vector<Certificate*>* generateCertificates(InputStream& in) throw (CertificateException);
+
+ const String& getType() const throw ();
+ const Provider& getProvider() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file CertificateFactorySpi.h
+ * \ingroup CXX_SECURITY_CERT_m
+ */
+
+#ifndef _CLASS_CERTIFICATEFACTORYSPI_H
+#define _CLASS_CERTIFICATEFACTORYSPI_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/io/InputStream.h"
+using beecrypt::io::InputStream;
+#include "beecrypt/c++/io/OutputStream.h"
+using beecrypt::io::OutputStream;
+#include "beecrypt/c++/security/cert/Certificate.h"
+using beecrypt::security::cert::Certificate;
+
+#include <vector>
+using std::vector;
+
+namespace beecrypt {
+ namespace security {
+ namespace cert {
+ class BEECRYPTCXXAPI CertificateFactorySpi
+ {
+ friend class CertificateFactory;
+
+ protected:
+ virtual Certificate* engineGenerateCertificate(InputStream& in) throw (CertificateException) = 0;
+ virtual vector<Certificate*>* engineGenerateCertificates(InputStream& in) throw (CertificateException) = 0;
+
+ public:
+ virtual ~CertificateFactorySpi() {};
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/cert/CertificateNotYetValidException.h"
+
+using namespace beecrypt::security::cert;
+
+CertificateNotYetValidException::CertificateNotYetValidException() throw ()
+{
+}
+
+CertificateNotYetValidException::CertificateNotYetValidException(const String& message) throw () : CertificateException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file CertificateNotYetValidException.h
+ * \ingroup CXX_SECURITY_CERT_m
+ */
+
+#ifndef _CLASS_CERTIFICATENOTYETVALIDEXCEPTION_H
+#define _CLASS_CERTIFICATENOTYETVALIDEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/cert/CertificateException.h"
+using beecrypt::security::cert::CertificateException;
+
+namespace beecrypt {
+ namespace security {
+ namespace cert {
+ class BEECRYPTCXXAPI CertificateNotYetValidException : public CertificateException
+ {
+ public:
+ CertificateNotYetValidException() throw ();
+ CertificateNotYetValidException(const String&) throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+noinst_LTLIBRARIES = libcxxsecuritycert.la
+
+cxxsecuritycertdir=$(pkgincludedir)/c++/security/cert
+
+libcxxsecuritycert_la_SOURCES =\
+Certificate.cxx \
+CertificateException.cxx \
+CertificateExpiredException.cxx \
+CertificateFactory.cxx \
+CertificateNotYetValidException.cxx
+
+cxxsecuritycert_HEADERS =\
+Certificate.h \
+CertificateException.h \
+CertificateExpiredException.h \
+CertificateFactory.h \
+CertificateFactorySpi.h \
+CertificateNotYetValidException.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxsecuritycert_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/security/cert
+DIST_COMMON = $(cxxsecuritycert_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxsecuritycert_la_LIBADD =
+am_libcxxsecuritycert_la_OBJECTS = Certificate.lo \
+ CertificateException.lo CertificateExpiredException.lo \
+ CertificateFactory.lo CertificateNotYetValidException.lo
+libcxxsecuritycert_la_OBJECTS = $(am_libcxxsecuritycert_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxsecuritycert_la_SOURCES)
+DIST_SOURCES = $(libcxxsecuritycert_la_SOURCES)
+am__installdirs = "$(DESTDIR)$(cxxsecuritycertdir)"
+cxxsecuritycertHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxsecuritycert_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+noinst_LTLIBRARIES = libcxxsecuritycert.la
+cxxsecuritycertdir = $(pkgincludedir)/c++/security/cert
+libcxxsecuritycert_la_SOURCES = \
+Certificate.cxx \
+CertificateException.cxx \
+CertificateExpiredException.cxx \
+CertificateFactory.cxx \
+CertificateNotYetValidException.cxx
+
+cxxsecuritycert_HEADERS = \
+Certificate.h \
+CertificateException.h \
+CertificateExpiredException.h \
+CertificateFactory.h \
+CertificateFactorySpi.h \
+CertificateNotYetValidException.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/security/cert/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/security/cert/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxsecuritycert.la: $(libcxxsecuritycert_la_OBJECTS) $(libcxxsecuritycert_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxsecuritycert_la_LDFLAGS) $(libcxxsecuritycert_la_OBJECTS) $(libcxxsecuritycert_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxsecuritycertHEADERS: $(cxxsecuritycert_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxsecuritycertdir)" || $(mkdir_p) "$(DESTDIR)$(cxxsecuritycertdir)"
+ @list='$(cxxsecuritycert_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxsecuritycertHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxsecuritycertdir)/$$f'"; \
+ $(cxxsecuritycertHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxsecuritycertdir)/$$f"; \
+ done
+
+uninstall-cxxsecuritycertHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxsecuritycert_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxsecuritycertdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxsecuritycertdir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(cxxsecuritycertdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cxxsecuritycertHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cxxsecuritycertHEADERS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-cxxsecuritycertHEADERS install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-cxxsecuritycertHEADERS \
+ uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAKey.h
+ * \ingroup CXX_SECURITY_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_DSAKEY_H
+#define _INTERFACE_DSAKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/interfaces/DSAParams.h"
+using beecrypt::security::interfaces::DSAParams;
+
+namespace beecrypt {
+ namespace security {
+ namespace interfaces {
+ /*!\brief DSA key interface.
+ * \ingroup CXX_IF_m
+ */
+ class DSAKey
+ {
+ public:
+ virtual const DSAParams& getParams() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAParams.h
+ * \ingroup CXX_SECURITY_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_DSAPARAMS_H
+#define _INTERFACE_DSAPARAMS_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+namespace beecrypt {
+ namespace security {
+ namespace interfaces {
+ class DSAParams
+ {
+ public:
+ virtual const mpbarrett& getP() const throw () = 0;
+ virtual const mpbarrett& getQ() const throw () = 0;
+ virtual const mpnumber& getG() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAPrivateKey.h
+ * \ingroup CXX_SECURITY_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_DSAPRIVATEKEY_H
+#define _INTERFACE_DSAPRIVATEKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/PrivateKey.h"
+using beecrypt::security::PrivateKey;
+#include "beecrypt/c++/security/interfaces/DSAKey.h"
+using beecrypt::security::interfaces::DSAKey;
+
+namespace beecrypt {
+ namespace security {
+ namespace interfaces {
+ /*!\brief DSA PriveKey interface
+ * \ingroup CXX_IF_m
+ */
+ class DSAPrivateKey : public PrivateKey, public DSAKey
+ {
+ public:
+ virtual const mpnumber& getX() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAPublicKey.h
+ * \ingroup CXX_SECURITY_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_DSAPUBLICKEY_H
+#define _INTERFACE_DSAPUBLICKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+#include "beecrypt/c++/security/interfaces/DSAKey.h"
+using beecrypt::security::interfaces::DSAKey;
+
+namespace beecrypt {
+ namespace security {
+ namespace interfaces {
+ /*!\brief DSA PublicKey interface
+ * \ingroup CXX_IF_m
+ */
+ class DSAPublicKey : public PublicKey, public DSAKey
+ {
+ public:
+ virtual const mpnumber& getY() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+cxxsecurityinterfacesdir=$(pkgincludedir)/c++/security/interfaces
+
+cxxsecurityinterfaces_HEADERS =\
+DSAKey.h \
+DSAParams.h \
+DSAPrivateKey.h \
+DSAPublicKey.h \
+RSAKey.h \
+RSAPrivateCrtKey.h \
+RSAPrivateKey.h \
+RSAPublicKey.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/security/interfaces
+DIST_COMMON = $(cxxsecurityinterfaces_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+am__installdirs = "$(DESTDIR)$(cxxsecurityinterfacesdir)"
+cxxsecurityinterfacesHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxsecurityinterfaces_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+cxxsecurityinterfacesdir = $(pkgincludedir)/c++/security/interfaces
+cxxsecurityinterfaces_HEADERS = \
+DSAKey.h \
+DSAParams.h \
+DSAPrivateKey.h \
+DSAPublicKey.h \
+RSAKey.h \
+RSAPrivateCrtKey.h \
+RSAPrivateKey.h \
+RSAPublicKey.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/security/interfaces/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/security/interfaces/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxsecurityinterfacesHEADERS: $(cxxsecurityinterfaces_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxsecurityinterfacesdir)" || $(mkdir_p) "$(DESTDIR)$(cxxsecurityinterfacesdir)"
+ @list='$(cxxsecurityinterfaces_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxsecurityinterfacesHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxsecurityinterfacesdir)/$$f'"; \
+ $(cxxsecurityinterfacesHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxsecurityinterfacesdir)/$$f"; \
+ done
+
+uninstall-cxxsecurityinterfacesHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxsecurityinterfaces_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxsecurityinterfacesdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxsecurityinterfacesdir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(cxxsecurityinterfacesdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cxxsecurityinterfacesHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cxxsecurityinterfacesHEADERS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool ctags distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am \
+ install-cxxsecurityinterfacesHEADERS install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-cxxsecurityinterfacesHEADERS \
+ uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAKey.h
+ * \ingroup CXX_SECURITY_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_RSAKEY_H
+#define _INTERFACE_RSAKEY_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+namespace beecrypt {
+ namespace security {
+ namespace interfaces {
+ /*!\brief RSA key interface.
+ * \ingroup CXX_IF_m
+ */
+ class RSAKey
+ {
+ public:
+ virtual const mpbarrett& getModulus() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPrivateCrtKey.h
+ * \ingroup CXX_SECURITY_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_RSAPRIVATECRTKEY_H
+#define _INTERFACE_RSAPRIVATECRTKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/interfaces/RSAPrivateKey.h"
+using beecrypt::security::interfaces::RSAPrivateKey;
+
+namespace beecrypt {
+ namespace security {
+ namespace interfaces {
+ /*!\brief The interface to an RSA private key, as defined in the PKCS#1 standard, using the Chinese Remainder Theorem (CRT) information values.
+ * \ingroup CXX_IF_m
+ */
+ class RSAPrivateCrtKey : public RSAPrivateKey
+ {
+ public:
+ virtual const mpnumber& getPublicExponent() const throw () = 0;
+ virtual const mpbarrett& getPrimeP() const throw () = 0;
+ virtual const mpbarrett& getPrimeQ() const throw () = 0;
+ virtual const mpnumber& getPrimeExponentP() const throw () = 0;
+ virtual const mpnumber& getPrimeExponentQ() const throw () = 0;
+ virtual const mpnumber& getCrtCoefficient() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPrivateKey.h
+ * \ingroup CXX_SECURITY_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_RSAPRIVATEKEY_H
+#define _INTERFACE_RSAPRIVATEKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/PrivateKey.h"
+using beecrypt::security::PrivateKey;
+#include "beecrypt/c++/security/interfaces/RSAKey.h"
+using beecrypt::security::interfaces::RSAKey;
+
+namespace beecrypt {
+ namespace security {
+ namespace interfaces {
+ /*!\ingroup CXX_IF_m
+ */
+ class RSAPrivateKey : public PrivateKey, public RSAKey
+ {
+ public:
+ virtual const mpnumber& getPrivateExponent() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPublicKey.h
+ * \ingroup CXX_SECURITY_INTERFACES_m
+ */
+
+#ifndef _INTERFACE_RSAPUBLICKEY_H
+#define _INTERFACE_RSAPUBLICKEY_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/PublicKey.h"
+using beecrypt::security::PublicKey;
+#include "beecrypt/c++/security/interfaces/RSAKey.h"
+using beecrypt::security::interfaces::RSAKey;
+
+namespace beecrypt {
+ namespace security {
+ namespace interfaces {
+ /*!\ingroup CXX_IF_m
+ */
+ class RSAPublicKey : public PublicKey, public RSAKey
+ {
+ public:
+ virtual const mpnumber& getPublicExponent() const throw () = 0;
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file AlgorithmParameterSpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_ALGORITHMPARAMETERSPEC_H
+#define _CLASS_ALGORITHMPARAMETERSPEC_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ /*!\brief The base class for specification of cryptographic parameters.
+ */
+ class BEECRYPTCXXAPI AlgorithmParameterSpec
+ {
+ public:
+ virtual ~AlgorithmParameterSpec() {};
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/DSAParameterSpec.h"
+
+using namespace beecrypt::security::spec;
+
+DSAParameterSpec::DSAParameterSpec(const DSAParams& copy)
+{
+ _p = copy.getP();
+ _q = copy.getQ();
+ _g = copy.getG();
+}
+
+DSAParameterSpec::DSAParameterSpec(const mpbarrett& p, const mpbarrett& q, const mpnumber& g)
+{
+ _p = p;
+ _q = q;
+ _g = g;
+}
+
+DSAParameterSpec::~DSAParameterSpec()
+{
+}
+
+const mpbarrett& DSAParameterSpec::getP() const throw ()
+{
+ return _p;
+}
+
+const mpbarrett& DSAParameterSpec::getQ() const throw ()
+{
+ return _q;
+}
+
+const mpnumber& DSAParameterSpec::getG() const throw ()
+{
+ return _g;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAParameterSpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_DSAPARAMETERSPEC_H
+#define _CLASS_DSAPARAMETERSPEC_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+#include "beecrypt/dsa.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/interfaces/DSAParams.h"
+using beecrypt::security::interfaces::DSAParams;
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI DSAParameterSpec : public AlgorithmParameterSpec, public DSAParams
+ {
+ private:
+ mpbarrett _p;
+ mpbarrett _q;
+ mpnumber _g;
+
+ public:
+ DSAParameterSpec(const DSAParams&);
+ DSAParameterSpec(const mpbarrett& p, const mpbarrett& q, const mpnumber& g);
+ virtual ~DSAParameterSpec();
+
+ const mpbarrett& getP() const throw ();
+ const mpbarrett& getQ() const throw ();
+ const mpnumber& getG() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/DSAPrivateKeySpec.h"
+
+using namespace beecrypt::security::spec;
+
+DSAPrivateKeySpec::DSAPrivateKeySpec(const mpbarrett& p, const mpbarrett& q, const mpnumber& g, const mpnumber& x)
+{
+ _p = p;
+ _q = q;
+ _g = g;
+ _x = x;
+}
+
+DSAPrivateKeySpec::~DSAPrivateKeySpec()
+{
+ _x.wipe();
+}
+
+const mpbarrett& DSAPrivateKeySpec::getP() const throw ()
+{
+ return _p;
+}
+
+const mpbarrett& DSAPrivateKeySpec::getQ() const throw ()
+{
+ return _q;
+}
+
+const mpnumber& DSAPrivateKeySpec::getG() const throw ()
+{
+ return _g;
+}
+
+const mpnumber& DSAPrivateKeySpec::getX() const throw ()
+{
+ return _x;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAPrivateKeySpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_DSAPRIVATEKEYSPEC_H
+#define _CLASS_DSAPRIVATEKEYSPEC_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI DSAPrivateKeySpec : public KeySpec
+ {
+ private:
+ mpbarrett _p;
+ mpbarrett _q;
+ mpnumber _g;
+ mpnumber _x;
+
+ public:
+ DSAPrivateKeySpec(const mpbarrett& p, const mpbarrett& q, const mpnumber& g, const mpnumber& x);
+ virtual ~DSAPrivateKeySpec();
+
+ const mpbarrett& getP() const throw ();
+ const mpbarrett& getQ() const throw ();
+ const mpnumber& getG() const throw ();
+ const mpnumber& getX() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/DSAPublicKeySpec.h"
+
+using namespace beecrypt::security::spec;
+
+DSAPublicKeySpec::DSAPublicKeySpec(const mpbarrett& p, const mpbarrett& q, const mpnumber& g, const mpnumber& y)
+{
+ _p = p;
+ _q = q;
+ _g = g;
+ _y = y;
+}
+
+DSAPublicKeySpec::~DSAPublicKeySpec()
+{
+}
+
+const mpbarrett& DSAPublicKeySpec::getP() const throw ()
+{
+ return _p;
+}
+
+const mpbarrett& DSAPublicKeySpec::getQ() const throw ()
+{
+ return _q;
+}
+
+const mpnumber& DSAPublicKeySpec::getG() const throw ()
+{
+ return _g;
+}
+
+const mpnumber& DSAPublicKeySpec::getY() const throw ()
+{
+ return _y;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file DSAPublicKeySpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_DSAPUBLICKEYSPEC_H
+#define _CLASS_DSAPUBLICKEYSPEC_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI DSAPublicKeySpec : public KeySpec
+ {
+ private:
+ mpbarrett _p;
+ mpbarrett _q;
+ mpnumber _g;
+ mpnumber _y;
+
+ public:
+ DSAPublicKeySpec(const mpbarrett& p, const mpbarrett& q, const mpnumber& g, const mpnumber& y);
+ virtual ~DSAPublicKeySpec();
+
+ const mpbarrett& getP() const throw ();
+ const mpbarrett& getQ() const throw ();
+ const mpnumber& getG() const throw ();
+ const mpnumber& getY() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/EncodedKeySpec.h"
+
+using namespace beecrypt::security::spec;
+
+EncodedKeySpec::EncodedKeySpec(const byte* data, size_t size) : _encoded(data, size)
+{
+}
+
+EncodedKeySpec::EncodedKeySpec(const bytearray& copy) : _encoded(copy)
+{
+}
+
+EncodedKeySpec::~EncodedKeySpec()
+{
+}
+
+const bytearray& EncodedKeySpec::getEncoded() const throw ()
+{
+ return _encoded;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file EncodedKeySpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_ENCODEDKEYSPEC_H
+#define _CLASS_ENCODEDKEYSPEC_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/array.h"
+using beecrypt::bytearray;
+#include "beecrypt/c++/lang/String.h"
+using beecrypt::lang::String;
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI EncodedKeySpec : public KeySpec
+ {
+ private:
+ bytearray _encoded;
+
+ public:
+ EncodedKeySpec(const byte*, size_t);
+ EncodedKeySpec(const bytearray&);
+ virtual ~EncodedKeySpec();
+
+ const bytearray& getEncoded() const throw ();
+ virtual const String& getFormat() const throw () = 0;
+
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/InvalidKeySpecException.h"
+
+using namespace beecrypt::security::spec;
+
+InvalidKeySpecException::InvalidKeySpecException() throw ()
+{
+}
+
+InvalidKeySpecException::InvalidKeySpecException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file InvalidKeySpecException.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_INVALIDKEYSPECEXCEPTION_H
+#define _CLASS_INVALIDKEYSPECEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI InvalidKeySpecException : public GeneralSecurityException
+ {
+ public:
+ InvalidKeySpecException() throw ();
+ InvalidKeySpecException(const String&) throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/InvalidParameterSpecException.h"
+
+using namespace beecrypt::security::spec;
+
+InvalidParameterSpecException::InvalidParameterSpecException() throw ()
+{
+}
+
+InvalidParameterSpecException::InvalidParameterSpecException(const String& message) throw () : GeneralSecurityException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file InvalidParameterSpecException.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_INVALIDPARAMETERSPECEXCEPTION_H
+#define _CLASS_INVALIDPARAMETERSPECEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/GeneralSecurityException.h"
+using beecrypt::security::GeneralSecurityException;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI InvalidParameterSpecException : public GeneralSecurityException
+ {
+ public:
+ InvalidParameterSpecException() throw ();
+ InvalidParameterSpecException(const String&) throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file KeySpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_KEYSPEC_H
+#define _CLASS_KEYSPEC_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ /*!\brief The base class for specification of cryptographic keys.
+ */
+ class BEECRYPTCXXAPI KeySpec
+ {
+ public:
+ virtual ~KeySpec() {}
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+noinst_LTLIBRARIES = libcxxsecurityspec.la
+
+cxxsecurityspecdir=$(pkgincludedir)/c++/security/spec
+
+libcxxsecurityspec_la_SOURCES =\
+DSAParameterSpec.cxx \
+DSAPrivateKeySpec.cxx \
+DSAPublicKeySpec.cxx \
+EncodedKeySpec.cxx \
+InvalidKeySpecException.cxx \
+InvalidParameterSpecException.cxx \
+RSAKeyGenParameterSpec.cxx \
+RSAPrivateCrtKeySpec.cxx \
+RSAPrivateKeySpec.cxx \
+RSAPublicKeySpec.cxx
+
+cxxsecurityspec_HEADERS =\
+AlgorithmParameterSpec.h \
+DSAParameterSpec.h \
+DSAPrivateKeySpec.h \
+DSAPublicKeySpec.h \
+EncodedKeySpec.h \
+InvalidKeySpecException.h \
+InvalidParameterSpecException.h \
+KeySpec.h \
+RSAKeyGenParameterSpec.h \
+RSAPrivateCrtKeySpec.h \
+RSAPrivateKeySpec.h \
+RSAPublicKeySpec.h
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxsecurityspec_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = c++/security/spec
+DIST_COMMON = $(cxxsecurityspec_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxsecurityspec_la_LIBADD =
+am_libcxxsecurityspec_la_OBJECTS = DSAParameterSpec.lo \
+ DSAPrivateKeySpec.lo DSAPublicKeySpec.lo EncodedKeySpec.lo \
+ InvalidKeySpecException.lo InvalidParameterSpecException.lo \
+ RSAKeyGenParameterSpec.lo RSAPrivateCrtKeySpec.lo \
+ RSAPrivateKeySpec.lo RSAPublicKeySpec.lo
+libcxxsecurityspec_la_OBJECTS = $(am_libcxxsecurityspec_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxsecurityspec_la_SOURCES)
+DIST_SOURCES = $(libcxxsecurityspec_la_SOURCES)
+am__installdirs = "$(DESTDIR)$(cxxsecurityspecdir)"
+cxxsecurityspecHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxsecurityspec_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+noinst_LTLIBRARIES = libcxxsecurityspec.la
+cxxsecurityspecdir = $(pkgincludedir)/c++/security/spec
+libcxxsecurityspec_la_SOURCES = \
+DSAParameterSpec.cxx \
+DSAPrivateKeySpec.cxx \
+DSAPublicKeySpec.cxx \
+EncodedKeySpec.cxx \
+InvalidKeySpecException.cxx \
+InvalidParameterSpecException.cxx \
+RSAKeyGenParameterSpec.cxx \
+RSAPrivateCrtKeySpec.cxx \
+RSAPrivateKeySpec.cxx \
+RSAPublicKeySpec.cxx
+
+cxxsecurityspec_HEADERS = \
+AlgorithmParameterSpec.h \
+DSAParameterSpec.h \
+DSAPrivateKeySpec.h \
+DSAPublicKeySpec.h \
+EncodedKeySpec.h \
+InvalidKeySpecException.h \
+InvalidParameterSpecException.h \
+KeySpec.h \
+RSAKeyGenParameterSpec.h \
+RSAPrivateCrtKeySpec.h \
+RSAPrivateKeySpec.h \
+RSAPublicKeySpec.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/security/spec/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/security/spec/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxsecurityspec.la: $(libcxxsecurityspec_la_OBJECTS) $(libcxxsecurityspec_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxsecurityspec_la_LDFLAGS) $(libcxxsecurityspec_la_OBJECTS) $(libcxxsecurityspec_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxsecurityspecHEADERS: $(cxxsecurityspec_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxsecurityspecdir)" || $(mkdir_p) "$(DESTDIR)$(cxxsecurityspecdir)"
+ @list='$(cxxsecurityspec_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxsecurityspecHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxsecurityspecdir)/$$f'"; \
+ $(cxxsecurityspecHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxsecurityspecdir)/$$f"; \
+ done
+
+uninstall-cxxsecurityspecHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxsecurityspec_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxsecurityspecdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxsecurityspecdir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(cxxsecurityspecdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cxxsecurityspecHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cxxsecurityspecHEADERS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-cxxsecurityspecHEADERS install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-cxxsecurityspecHEADERS \
+ uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/RSAKeyGenParameterSpec.h"
+
+using namespace beecrypt::security::spec;
+
+const mpnumber RSAKeyGenParameterSpec::F0(3);
+const mpnumber RSAKeyGenParameterSpec::F4(65537);
+
+RSAKeyGenParameterSpec::RSAKeyGenParameterSpec(size_t keysize, const mpnumber& publicExponent)
+{
+ _keysize = keysize;
+ _e = publicExponent;
+}
+
+RSAKeyGenParameterSpec::~RSAKeyGenParameterSpec()
+{
+}
+
+size_t RSAKeyGenParameterSpec::getKeysize() const throw ()
+{
+ return _keysize;
+}
+
+const mpnumber& RSAKeyGenParameterSpec::getPublicExponent() const throw ()
+{
+ return _e;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAKeyGenParameterSpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_RSAKEYGENPARAMETERSPEC
+#define _CLASS_RSAKEYGENPARAMETERSPEC
+
+#include "beecrypt/beecrypt.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/AlgorithmParameterSpec.h"
+using beecrypt::security::spec::AlgorithmParameterSpec;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI RSAKeyGenParameterSpec : public AlgorithmParameterSpec
+ {
+ public:
+ static const mpnumber F0;
+ static const mpnumber F4;
+
+ private:
+ size_t _keysize;
+ mpnumber _e;
+
+ public:
+ RSAKeyGenParameterSpec(size_t, const mpnumber&);
+ virtual ~RSAKeyGenParameterSpec();
+
+ size_t getKeysize() const throw ();
+ const mpnumber& getPublicExponent() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/RSAPrivateCrtKeySpec.h"
+
+using namespace beecrypt::security::spec;
+
+RSAPrivateCrtKeySpec::RSAPrivateCrtKeySpec(const mpbarrett& modulus, const mpnumber& publicExponent, const mpnumber& privateExponent, const mpbarrett& primeP, const mpbarrett& primeQ, const mpnumber& primeExponentP, const mpnumber& primeExponentQ, const mpnumber& crtCoefficient) : RSAPrivateKeySpec(modulus, privateExponent)
+{
+ _e = publicExponent;
+ _p = primeP;
+ _q = primeQ;
+ _dp = primeExponentP;
+ _dq = primeExponentQ;
+ _qi = crtCoefficient;
+}
+
+RSAPrivateCrtKeySpec::~RSAPrivateCrtKeySpec()
+{
+}
+
+const mpnumber& RSAPrivateCrtKeySpec::getPublicExponent() const throw ()
+{
+ return _e;
+}
+
+const mpbarrett& RSAPrivateCrtKeySpec::getPrimeP() const throw ()
+{
+ return _p;
+}
+
+const mpbarrett& RSAPrivateCrtKeySpec::getPrimeQ() const throw ()
+{
+ return _q;
+}
+
+const mpnumber& RSAPrivateCrtKeySpec::getPrimeExponentP() const throw ()
+{
+ return _dp;
+}
+
+const mpnumber& RSAPrivateCrtKeySpec::getPrimeExponentQ() const throw ()
+{
+ return _dq;
+}
+
+const mpnumber& RSAPrivateCrtKeySpec::getCrtCoefficient() const throw ()
+{
+ return _qi;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPrivateCrtKeySpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_RSAPRIVATECRTKEYSPEC_H
+#define _CLASS_RSAPRIVATECRTKEYSPEC_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/RSAPrivateKeySpec.h"
+using beecrypt::security::spec::RSAPrivateKeySpec;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI RSAPrivateCrtKeySpec : public RSAPrivateKeySpec
+ {
+ private:
+ mpnumber _e;
+ mpbarrett _p;
+ mpbarrett _q;
+ mpnumber _dp;
+ mpnumber _dq;
+ mpnumber _qi;
+
+ public:
+ RSAPrivateCrtKeySpec(const mpbarrett& modulus, const mpnumber& publicExponent, const mpnumber& privateExponent, const mpbarrett& primeP, const mpbarrett& primeQ, const mpnumber& primeExponentP, const mpnumber& primeExponentQ, const mpnumber& crtCoefficient);
+ virtual ~RSAPrivateCrtKeySpec();
+
+ const mpnumber& getPublicExponent() const throw ();
+ const mpbarrett& getPrimeP() const throw ();
+ const mpbarrett& getPrimeQ() const throw ();
+ const mpnumber& getPrimeExponentP() const throw ();
+ const mpnumber& getPrimeExponentQ() const throw ();
+ const mpnumber& getCrtCoefficient() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/RSAPrivateKeySpec.h"
+
+using namespace beecrypt::security::spec;
+
+RSAPrivateKeySpec::RSAPrivateKeySpec(const mpbarrett& modulus, const mpnumber& privateExponent)
+{
+ _n = modulus;
+ _d = privateExponent;
+}
+
+RSAPrivateKeySpec::~RSAPrivateKeySpec()
+{
+}
+
+const mpbarrett& RSAPrivateKeySpec::getModulus() const throw ()
+{
+ return _n;
+}
+
+const mpnumber& RSAPrivateKeySpec::getPrivateExponent() const throw ()
+{
+ return _d;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPrivateKeySpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_RSAPRIVATEKEYSPEC_H
+#define _CLASS_RSAPRIVATEKEYSPEC_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI RSAPrivateKeySpec : public KeySpec
+ {
+ private:
+ mpbarrett _n;
+ mpnumber _d;
+
+ public:
+ RSAPrivateKeySpec(const mpbarrett& modulus, const mpnumber& privateExponent);
+ virtual ~RSAPrivateKeySpec();
+
+ const mpbarrett& getModulus() const throw ();
+ const mpnumber& getPrivateExponent() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/spec/RSAPublicKeySpec.h"
+
+using namespace beecrypt::security::spec;
+
+RSAPublicKeySpec::RSAPublicKeySpec(const mpbarrett& modulus, const mpnumber& publicExponent)
+{
+ _n = modulus;
+ _e = publicExponent;
+}
+
+RSAPublicKeySpec::~RSAPublicKeySpec()
+{
+}
+
+const mpbarrett& RSAPublicKeySpec::getModulus() const throw ()
+{
+ return _n;
+}
+
+const mpnumber& RSAPublicKeySpec::getPublicExponent() const throw ()
+{
+ return _e;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file RSAPublicKeySpec.h
+ * \ingroup CXX_SECURITY_SPEC_m
+ */
+
+#ifndef _CLASS_RSAPUBLICKEYSPEC_H
+#define _CLASS_RSAPUBLICKEYSPEC_H
+
+#include "beecrypt/api.h"
+#include "beecrypt/mpbarrett.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/security/spec/KeySpec.h"
+using beecrypt::security::spec::KeySpec;
+
+namespace beecrypt {
+ namespace security {
+ namespace spec {
+ class BEECRYPTCXXAPI RSAPublicKeySpec : public KeySpec
+ {
+ private:
+ mpbarrett _n;
+ mpnumber _e;
+
+ public:
+ RSAPublicKeySpec(const mpbarrett& modulus, const mpnumber& publicExponent);
+ virtual ~RSAPublicKeySpec();
+
+ const mpbarrett& getModulus() const throw ();
+ const mpnumber& getPublicExponent() const throw ();
+ };
+ }
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/AlgorithmParameterGenerator.h"
+using beecrypt::security::AlgorithmParameterGenerator;
+#include "beecrypt/c++/security/AlgorithmParameters.h"
+using beecrypt::security::AlgorithmParameters;
+#include "beecrypt/c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+#include "beecrypt/c++/security/KeyPairGenerator.h"
+using beecrypt::security::KeyPairGenerator;
+#include "beecrypt/c++/security/Signature.h"
+using beecrypt::security::Signature;
+#include "beecrypt/c++/security/spec/EncodedKeySpec.h"
+using beecrypt::security::spec::EncodedKeySpec;
+
+#include <iostream>
+using namespace std;
+#include <unicode/ustream.h>
+
+int main(int argc, char* argv[])
+{
+ int failures = 0;
+
+ try
+ {
+ KeyPairGenerator* kpg = KeyPairGenerator::getInstance("DSA");
+
+ kpg->initialize(1024);
+
+ KeyPair* pair = kpg->generateKeyPair();
+
+ Signature* sig = Signature::getInstance("SHA1withDSA");
+
+ sig->initSign(pair->getPrivate());
+
+ bytearray* tmp = sig->sign();
+
+ sig->initVerify(pair->getPublic());
+
+ if (!sig->verify(*tmp))
+ failures++;
+
+ KeyFactory* kf = KeyFactory::getInstance("BEE");
+
+ KeySpec* spec = kf->getKeySpec(pair->getPublic(), typeid(EncodedKeySpec));
+
+ PublicKey* pub = kf->generatePublic(*spec);
+
+ delete pub;
+ delete spec;
+ delete kf;
+ delete tmp;
+ delete sig;
+ delete pair;
+ delete kpg;
+ }
+ catch (Exception& ex)
+ {
+ cerr << "exception: " << ex.getMessage() << endl;
+ failures++;
+ }
+ catch (...)
+ {
+ cerr << "exception" << endl;
+ failures++;
+ }
+ return failures;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/io/FileInputStream.h"
+using beecrypt::io::FileInputStream;
+#include "beecrypt/c++/io/FileOutputStream.h"
+using beecrypt::io::FileOutputStream;
+#include "beecrypt/c++/security/KeyStore.h"
+using beecrypt::security::KeyStore;
+#include "beecrypt/c++/security/KeyPairGenerator.h"
+using beecrypt::security::KeyPairGenerator;
+#include "beecrypt/c++/beeyond/BeeCertificate.h"
+using beecrypt::beeyond::BeeCertificate;
+
+#include <iostream>
+using std::cout;
+using std::endl;
+#include <unicode/ustream.h>
+
+int main(int argc, char* argv[])
+{
+ try
+ {
+ array<javachar> password(4);
+
+ password[0] = (javachar) 't';
+ password[1] = (javachar) 'e';
+ password[2] = (javachar) 's';
+ password[3] = (javachar) 't';
+
+ KeyStore* ks = KeyStore::getInstance(KeyStore::getDefaultType());
+
+ if (argc == 2)
+ {
+ FileInputStream fin(fopen(argv[1], "rb"));
+
+ ks->load(&fin, &password);
+
+ Key* k = ks->getKey("rsa", password);
+
+ cout << "k algorithm = " << k->getAlgorithm() << endl;
+
+ delete k;
+ }
+ else
+ {
+ KeyPairGenerator* kpg = KeyPairGenerator::getInstance("RSA");
+
+ kpg->initialize(1024);
+
+ KeyPair* pair = kpg->generateKeyPair();
+
+ vector<Certificate*> chain;
+
+ chain.push_back(BeeCertificate::self(pair->getPublic(), pair->getPrivate(), "SHA1withRSA"));
+
+ FileOutputStream fos(fopen("keystore", "wb"));
+
+ // create an empty stream
+ ks->load((InputStream*) 0, &password);
+ ks->setKeyEntry("rsa", pair->getPrivate(), password, chain);
+ ks->store(fos, &password);
+ }
+
+ delete ks;
+ }
+ catch (Exception e)
+ {
+ cout << "Exception: " + e.getMessage() << endl;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/security/Security.h"
+using beecrypt::security::Security;
+#include "beecrypt/c++/security/AlgorithmParameterGenerator.h"
+using beecrypt::security::AlgorithmParameterGenerator;
+#include "beecrypt/c++/security/AlgorithmParameters.h"
+using beecrypt::security::AlgorithmParameters;
+#include "beecrypt/c++/security/KeyFactory.h"
+using beecrypt::security::KeyFactory;
+#include "beecrypt/c++/security/KeyPairGenerator.h"
+using beecrypt::security::KeyPairGenerator;
+#include "beecrypt/c++/security/Signature.h"
+using beecrypt::security::Signature;
+#include "beecrypt/c++/security/spec/EncodedKeySpec.h"
+using beecrypt::security::spec::EncodedKeySpec;
+
+#include <iostream>
+using namespace std;
+#include <unicode/ustream.h>
+
+int main(int argc, char* argv[])
+{
+ int failures = 0;
+
+ try
+ {
+ KeyPairGenerator* kpg = KeyPairGenerator::getInstance("RSA");
+
+ kpg->initialize(1024);
+
+ KeyPair* pair = kpg->generateKeyPair();
+
+ Signature* sig = Signature::getInstance("SHA1withRSA");
+
+ sig->initSign(pair->getPrivate());
+
+ bytearray* tmp = sig->sign();
+
+ sig->initVerify(pair->getPublic());
+
+ if (!sig->verify(*tmp))
+ failures++;
+
+ KeyFactory* kf = KeyFactory::getInstance("BEE");
+
+ KeySpec* spec = kf->getKeySpec(pair->getPublic(), typeid(EncodedKeySpec));
+
+ PublicKey* pub = kf->generatePublic(*spec);
+
+ delete pub;
+ delete spec;
+ delete kf;
+ delete tmp;
+ delete sig;
+ delete pair;
+ delete kpg;
+ }
+ catch (Exception& ex)
+ {
+ cerr << "Exception: " << ex.getMessage() << endl;
+ failures++;
+ }
+ catch (...)
+ {
+ cerr << "exception" << endl;
+ failures++;
+ }
+ return failures;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/timestamp.h"
+#include "beecrypt/c++/util/Date.h"
+
+#include <unicode/datefmt.h>
+
+namespace {
+ #if WIN32
+ __declspec(thread) String* result = 0;
+ __declspec(thread) DateFormat* format = 0;
+ #else
+ # if __GNUC__ && __GNUC_PREREQ (3, 3)
+ __thread String* result = 0;
+ __thread DateFormat* format = 0;
+ # else
+ # warning Date.toString() method routine is not multi-thread safe
+ String* result = 0;
+ DateFormat* format = 0;
+ # endif
+ #endif
+}
+
+using namespace beecrypt::util;
+
+Date::Date() throw ()
+{
+ _time = timestamp();
+}
+
+Date::Date(javalong time) throw ()
+{
+ _time = time;
+}
+
+const Date& Date::operator=(const Date& set) throw ()
+{
+ _time = set._time;
+ return *this;
+}
+
+bool Date::operator==(const Date& cmp) const throw ()
+{
+ return _time == cmp._time;
+}
+
+bool Date::operator!=(const Date& cmp) const throw ()
+{
+ return _time != cmp._time;
+}
+
+bool Date::after(const Date& cmp) const throw ()
+{
+ return _time > cmp._time;
+}
+
+bool Date::before(const Date& cmp) const throw ()
+{
+ return _time < cmp._time;
+}
+
+javalong Date::getTime() const throw ()
+{
+ return _time;
+}
+
+void Date::setTime(javalong time) throw ()
+{
+ _time = time;
+}
+
+const String& Date::toString() const
+{
+ if (!format)
+ format = DateFormat::createDateTimeInstance();
+
+ if (!result)
+ result = new String();
+
+ *result = format->format((UDate) _time, *result);
+
+ return *result;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Date.h
+ * \ingroup CXX_UTIL_m
+ */
+
+#ifndef _CLASS_DATE_H
+#define _CLASS_DATE_H
+
+#include "beecrypt/api.h"
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/String.h"
+using beecrypt::lang::String;
+
+namespace beecrypt {
+ namespace util {
+ class BEECRYPTCXXAPI Date
+ {
+ private:
+ javalong _time;
+
+ public:
+ Date() throw ();
+ Date(javalong) throw ();
+
+ const Date& operator=(const Date&) throw ();
+ bool operator==(const Date&) const throw ();
+ bool operator!=(const Date&) const throw ();
+
+ bool after(const Date&) const throw ();
+ bool before(const Date&) const throw ();
+
+ javalong getTime() const throw ();
+ void setTime(javalong) throw ();
+
+ const String& toString() const;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Enumeration.h
+ * \ingroup CXX_UTIL_m
+ */
+
+#ifndef _INTERFACE_ENUMERATION_H
+#define _INTERFACE_ENUMERATION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/util/NoSuchElementException.h"
+using beecrypt::util::NoSuchElementException;
+
+namespace beecrypt {
+ namespace util {
+ class BEECRYPTCXXAPI Enumeration
+ {
+ public:
+ virtual ~Enumeration() throw () {};
+
+ virtual bool hasMoreElements() throw () = 0;
+ virtual const void* nextElement() throw (NoSuchElementException) = 0;
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+INCLUDES = -I$(top_srcdir)/..
+
+AUTOMAKE_OPTIONS = gnu no-dependencies
+
+noinst_LTLIBRARIES = libcxxutil.la
+cxxutildir= $(pkgincludedir)/c++/util
+
+libcxxutil_la_SOURCES =\
+Date.cxx \
+NoSuchElementException.cxx \
+Properties.cxx
+
+cxxutil_HEADERS =\
+Date.h \
+Enumeration.h \
+NoSuchElementException.h \
+Properties.h
+
+TESTS = testdate testprop
+
+check_PROGRAMS = testdate testprop
+
+testdate_SOURCES = testdate.cxx
+testdate_LDADD = ../libbeecrypt_cxx.la
+
+testprop_SOURCES = testprop.cxx
+testprop_LDADD = ../libbeecrypt_cxx.la
--- /dev/null
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libcxxutil_la_SOURCES) $(testdate_SOURCES) $(testprop_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+check_PROGRAMS = testdate$(EXEEXT) testprop$(EXEEXT)
+subdir = c++/util
+DIST_COMMON = $(cxxutil_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxxutil_la_LIBADD =
+am_libcxxutil_la_OBJECTS = Date.lo NoSuchElementException.lo \
+ Properties.lo
+libcxxutil_la_OBJECTS = $(am_libcxxutil_la_OBJECTS)
+am_testdate_OBJECTS = testdate.$(OBJEXT)
+testdate_OBJECTS = $(am_testdate_OBJECTS)
+testdate_DEPENDENCIES = ../libbeecrypt_cxx.la
+am_testprop_OBJECTS = testprop.$(OBJEXT)
+testprop_OBJECTS = $(am_testprop_OBJECTS)
+testprop_DEPENDENCIES = ../libbeecrypt_cxx.la
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcxxutil_la_SOURCES) $(testdate_SOURCES) \
+ $(testprop_SOURCES)
+DIST_SOURCES = $(libcxxutil_la_SOURCES) $(testdate_SOURCES) \
+ $(testprop_SOURCES)
+am__installdirs = "$(DESTDIR)$(cxxutildir)"
+cxxutilHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(cxxutil_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ASM_ALIGN = @ASM_ALIGN@
+ASM_ARCH = @ASM_ARCH@
+ASM_BIGENDIAN = @ASM_BIGENDIAN@
+ASM_CPU = @ASM_CPU@
+ASM_GLOBL = @ASM_GLOBL@
+ASM_GSYM_PREFIX = @ASM_GSYM_PREFIX@
+ASM_LSYM_PREFIX = @ASM_LSYM_PREFIX@
+ASM_OS = @ASM_OS@
+ASM_TEXTSEG = @ASM_TEXTSEG@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INCLUDE_DLFCN_H = @INCLUDE_DLFCN_H@
+INCLUDE_INTTYPES_H = @INCLUDE_INTTYPES_H@
+INCLUDE_MALLOC_H = @INCLUDE_MALLOC_H@
+INCLUDE_PTHREAD_H = @INCLUDE_PTHREAD_H@
+INCLUDE_STDINT_H = @INCLUDE_STDINT_H@
+INCLUDE_STDIO_H = @INCLUDE_STDIO_H@
+INCLUDE_STDLIB_H = @INCLUDE_STDLIB_H@
+INCLUDE_STRING_H = @INCLUDE_STRING_H@
+INCLUDE_SYNCH_H = @INCLUDE_SYNCH_H@
+INCLUDE_THREAD_H = @INCLUDE_THREAD_H@
+INCLUDE_UNISTD_H = @INCLUDE_UNISTD_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAINC = @JAVAINC@
+LDFLAGS = @LDFLAGS@
+LIBALT = @LIBALT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAYBE_LTLIB = @MAYBE_LTLIB@
+MAYBE_SUB = @MAYBE_SUB@
+MP_WBITS = @MP_WBITS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHONINC = @PYTHONINC@
+PYTHONLIB = @PYTHONLIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPEDEF_BC_COND_T = @TYPEDEF_BC_COND_T@
+TYPEDEF_BC_MUTEX_T = @TYPEDEF_BC_MUTEX_T@
+TYPEDEF_BC_THREAD_T = @TYPEDEF_BC_THREAD_T@
+TYPEDEF_INT16_T = @TYPEDEF_INT16_T@
+TYPEDEF_INT32_T = @TYPEDEF_INT32_T@
+TYPEDEF_INT64_T = @TYPEDEF_INT64_T@
+TYPEDEF_INT8_T = @TYPEDEF_INT8_T@
+TYPEDEF_SIZE_T = @TYPEDEF_SIZE_T@
+TYPEDEF_UINT16_T = @TYPEDEF_UINT16_T@
+TYPEDEF_UINT32_T = @TYPEDEF_UINT32_T@
+TYPEDEF_UINT64_T = @TYPEDEF_UINT64_T@
+TYPEDEF_UINT8_T = @TYPEDEF_UINT8_T@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_cv_have_gcj = @ac_cv_have_gcj@
+ac_cv_have_java = @ac_cv_have_java@
+ac_cv_have_javac = @ac_cv_have_javac@
+ac_cv_have_python = @ac_cv_have_python@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = -I$(top_srcdir)/..
+AUTOMAKE_OPTIONS = gnu no-dependencies
+noinst_LTLIBRARIES = libcxxutil.la
+cxxutildir = $(pkgincludedir)/c++/util
+libcxxutil_la_SOURCES = \
+Date.cxx \
+NoSuchElementException.cxx \
+Properties.cxx
+
+cxxutil_HEADERS = \
+Date.h \
+Enumeration.h \
+NoSuchElementException.h \
+Properties.h
+
+TESTS = testdate testprop
+testdate_SOURCES = testdate.cxx
+testdate_LDADD = ../libbeecrypt_cxx.la
+testprop_SOURCES = testprop.cxx
+testprop_LDADD = ../libbeecrypt_cxx.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cxx .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/util/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu c++/util/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcxxutil.la: $(libcxxutil_la_OBJECTS) $(libcxxutil_la_DEPENDENCIES)
+ $(CXXLINK) $(libcxxutil_la_LDFLAGS) $(libcxxutil_la_OBJECTS) $(libcxxutil_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+testdate$(EXEEXT): $(testdate_OBJECTS) $(testdate_DEPENDENCIES)
+ @rm -f testdate$(EXEEXT)
+ $(CXXLINK) $(testdate_LDFLAGS) $(testdate_OBJECTS) $(testdate_LDADD) $(LIBS)
+testprop$(EXEEXT): $(testprop_OBJECTS) $(testprop_DEPENDENCIES)
+ @rm -f testprop$(EXEEXT)
+ $(CXXLINK) $(testprop_LDFLAGS) $(testprop_OBJECTS) $(testprop_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cxx.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-cxxutilHEADERS: $(cxxutil_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(cxxutildir)" || $(mkdir_p) "$(DESTDIR)$(cxxutildir)"
+ @list='$(cxxutil_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(cxxutilHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cxxutildir)/$$f'"; \
+ $(cxxutilHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cxxutildir)/$$f"; \
+ done
+
+uninstall-cxxutilHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cxxutil_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f '$(DESTDIR)$(cxxutildir)/$$f'"; \
+ rm -f "$(DESTDIR)$(cxxutildir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list='$(TESTS)'; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -n "$$skipped" && echo "$$skipped"; \
+ test -n "$$report" && echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(cxxutildir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cxxutilHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cxxutilHEADERS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES ctags distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-cxxutilHEADERS install-data install-data-am \
+ install-exec install-exec-am install-info install-info-am \
+ install-man install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-cxxutilHEADERS uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/util/NoSuchElementException.h"
+
+using namespace beecrypt::util;
+
+NoSuchElementException::NoSuchElementException() throw ()
+{
+}
+
+NoSuchElementException::NoSuchElementException(const String& message) throw () : RuntimeException(message)
+{
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file NoSuchElementException.h
+ * \ingroup CXX_UTIL_m
+ */
+
+#ifndef _CLASS_NOSUCHELEMENTEXCEPTION_H
+#define _CLASS_NOSUCHELEMENTEXCEPTION_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/lang/RuntimeException.h"
+using beecrypt::lang::RuntimeException;
+
+namespace beecrypt {
+ namespace util {
+ class BEECRYPTCXXAPI NoSuchElementException : public RuntimeException
+ {
+ public:
+ NoSuchElementException() throw ();
+ NoSuchElementException(const String&) throw ();
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/c++/util/Properties.h"
+using beecrypt::util::Properties;
+#include "beecrypt/c++/io/DataInputStream.h"
+using beecrypt::io::DataInputStream;
+#include "beecrypt/c++/io/PrintStream.h"
+using beecrypt::io::PrintStream;
+
+using namespace beecrypt::util;
+
+Properties::PropEnum::PropEnum(const properties_map& _map) throw ()
+{
+ _it = _map.begin();
+ _end = _map.end();
+}
+
+Properties::PropEnum::~PropEnum() throw ()
+{
+}
+
+bool Properties::PropEnum::hasMoreElements() throw ()
+{
+ return _it != _end;
+}
+
+const void* Properties::PropEnum::nextElement() throw (NoSuchElementException)
+{
+ if (_it == _end)
+ throw NoSuchElementException();
+
+ return (const void*) &((_it++)->first);
+}
+
+Properties::Properties()
+{
+ _lock.init();
+ defaults = 0;
+}
+
+Properties::Properties(const Properties& copy)
+{
+ _lock.init();
+ /* copy every item in the map */
+ _pmap = copy._pmap;
+ defaults = copy.defaults;
+}
+
+Properties::Properties(const Properties* defaults) : defaults(defaults)
+{
+ _lock.init();
+}
+
+Properties::~Properties()
+{
+ _lock.destroy();
+}
+
+const String* Properties::getProperty(const String& key) const throw ()
+{
+ properties_map::const_iterator it = _pmap.find(key);
+
+ if (it != _pmap.end())
+ return &(it->second);
+ else if (defaults)
+ return defaults->getProperty(key);
+
+ return 0;
+}
+
+const String* Properties::getProperty(const String& key, const String& defaultValue) const throw ()
+{
+ const String* result = getProperty(key);
+
+ if (result)
+ return result;
+ else
+ return &defaultValue;
+}
+
+void Properties::setProperty(const String& key, const String& value) throw ()
+{
+ _lock.lock();
+ _pmap[key] = value;
+ _lock.unlock();
+}
+
+Enumeration* Properties::propertyNames() const
+{
+ return new PropEnum(_pmap);
+}
+
+void Properties::load(InputStream& in) throw (IOException)
+{
+ String line;
+ String key;
+ String value;
+
+ DataInputStream dis(in);
+
+ _lock.lock();
+ try
+ {
+ while (dis.available())
+ {
+ dis.readLine(line);
+
+ if (line.indexOf((UChar) 0x23) != 0)
+ {
+ // more advanced parsing can come later
+ // see if we can find an '=' somewhere inside the string
+ int32_t eqidx = line.indexOf((UChar) 0x3D);
+ if (eqidx >= 0)
+ {
+ // we can split the line into two parts
+ key.setTo(line, 0, eqidx);
+ value.setTo(line, eqidx+1);
+ _pmap[key] = value;
+ }
+ }
+ // else it's a comment line which we discard
+ }
+ _lock.unlock();
+ }
+ catch (IOException)
+ {
+ _lock.unlock();
+ throw;
+ }
+}
+
+void Properties::store(OutputStream& out, const String& header) throw (IOException)
+{
+ properties_map::const_iterator pit;
+ PrintStream ps(out);
+
+ ps.println("# " + header);
+
+ _lock.lock();
+
+ for (pit = _pmap.begin(); pit != _pmap.end(); ++pit)
+ {
+ ps.print(pit->first);
+ ps.print((javachar) 0x3D);
+ ps.println(pit->second);
+ }
+
+ _lock.unlock();
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!\file Properties.h
+ * \ingroup CXX_UTIL_m
+ */
+
+#ifndef _CLASS_PROPERTIES_H
+#define _CLASS_PROPERTIES_H
+
+#ifdef __cplusplus
+
+#include "beecrypt/c++/mutex.h"
+using beecrypt::mutex;
+#include "beecrypt/c++/io/InputStream.h"
+using beecrypt::io::InputStream;
+#include "beecrypt/c++/io/OutputStream.h"
+using beecrypt::io::OutputStream;
+#include "beecrypt/c++/lang/String.h"
+using beecrypt::lang::String;
+#include "beecrypt/c++/util/Enumeration.h"
+using beecrypt::util::Enumeration;
+
+#include <map>
+using std::map;
+
+namespace beecrypt {
+ namespace util {
+ class BEECRYPTCXXAPI Properties
+ {
+ private:
+ typedef map<String,String> properties_map;
+
+ class PropEnum : public Enumeration
+ {
+ public:
+ properties_map::const_iterator _it;
+ properties_map::const_iterator _end;
+
+ public:
+ PropEnum(const properties_map&) throw ();
+ virtual ~PropEnum() throw ();
+
+ virtual bool hasMoreElements() throw ();
+ virtual const void* nextElement() throw (NoSuchElementException);
+ };
+
+ properties_map _pmap;
+
+ mutex _lock;
+
+ protected:
+ const Properties* defaults;
+
+ public:
+ Properties();
+ Properties(const Properties& copy);
+ Properties(const Properties* defaults);
+ ~Properties();
+
+ const String* getProperty(const String& key) const throw ();
+ const String* getProperty(const String& key, const String& defaultValue) const throw ();
+
+ void setProperty(const String& key, const String& value) throw ();
+
+ Enumeration* propertyNames() const;
+
+ void load(InputStream& in) throw (IOException);
+ void store(OutputStream& out, const String& header) throw (IOException);
+ };
+ }
+}
+
+#endif
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+// #define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "c++/util/Date.h"
+using beecrypt::util::Date;
+
+#include <unicode/ustream.h>
+#include <iostream>
+using namespace std;
+
+int main(int argc, char* argv[])
+{
+ Date now;
+
+ cout << now.toString() << endl;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Beeyond Software Holding BV
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+// #define BEECRYPT_CXX_DLL_EXPORT
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "c++/io/FileOutputStream.h"
+using beecrypt::io::FileOutputStream;
+#include "c++/util/Properties.h"
+using beecrypt::util::Properties;
+
+#include <unicode/ustream.h>
+#include <iostream>
+using namespace std;
+#include <stdio.h>
+
+int main(int argc, char* argv[])
+{
+
+ Properties p;
+
+ p.setProperty("apple", "red");
+ p.setProperty("yam", "orange");
+ p.setProperty("lime", "green");
+ p.setProperty("grape", "blue");
+
+ Enumeration* e = p.propertyNames();
+
+ while (e->hasMoreElements())
+ {
+ const String* s = (const String*) e->nextElement();
+
+ cout << *s << endl;
+ }
+
+ delete e;
+
+ FileOutputStream fso(stdout);
+ p.store(fso, "properties test");
+}
define(`LSYM_PREFIX',`@ASM_LSYM_PREFIX@')
define(`ALIGN',`@ASM_ALIGN@')
define(`__CONFIG_M4_INCLUDED__')
-include(`@top_srcdir@/gas/asmdefs.m4')
')
# Process this file with autoconf to produce a configure script.
-AC_INIT([beecrypt],[3.0.0pre],[bob.deblier@pandora.be])
+AC_INIT([beecrypt],[4.0.0],[bob.deblier@telenet.be])
AM_INIT_AUTOMAKE
AC_CANONICAL_TARGET
AC_CONFIG_SRCDIR(beecrypt.h)
],[ ac_enable_debug=no])
AC_ARG_WITH(cpu,[ --with-cpu optimize for specific cpu],[
- ac_with_cpu=yes
- bc_target_cpu=$withval
- case $target_cpu in
- i[[3456]]86)
- case $withval in
- i[[3456]]86 | \
- pentium | pentium-mmx | pentiumpro | pentium[[234]] | \
- athlon | athlon-tbird | athlon-4 | athlon-xp | athlon-mp)
- ;;
- *)
- AC_MSG_WARN([invalid cpu type])
- bc_target_cpu=$target_cpu
- ;;
- esac
- ;;
- powerpc)
- case $withval in
- 403 | 505 | \
- 60[[1234]] | 60[[34]]e | 6[[23]]0 | \
- 7[[45]]0 | 74[[05]]0 | \
- 801 | 82[[13]] | 860 | \
- power | power2 | powerpc | powerpc64)
- ;;
- *)
- AC_MSG_WARN([invalid cpu type])
- bc_target_cpu=$target_cpu
- ;;
- esac
- ;;
- sparc)
- case $withval in
- sparcv8 | sparcv8plus | sparcv8plus[[ab]] | sparcv9 | sparcv9[[ab]])
- ;;
- *)
- AC_MSG_WARN([invalid cpu type])
- bc_target_cpu=$target_cpu
- ;;
- esac
- ;;
- x86) # QNX Neutrino doesn't list the exact cpu type
- case $withval in
- i[[3456]]86)
- ;;
- *)
- AC_MSG_WARN([unsupported or invalid cpu type])
- bc_target_cpu=$target_cpu
- ;;
- esac
- ;;
- *)
- AC_MSG_WARN([unsupported or invalid cpu type])
- bc_target_cpu=$target_cpu
- ;;
- esac
+ BEECRYPT_WITH_CPU
],[
- ac_with_cpu=no
- bc_target_cpu=$target_cpu
+ BEECRYPT_WITHOUT_CPU
])
AC_ARG_WITH(arch,[ --with-arch optimize for specific architecture (may not run on other cpus of same family)],[
- ac_with_arch=yes
- bc_target_arch=$withval
- case $target_cpu in
- i[[3456]]86)
- case $withval in
- i[[3456]]86 | \
- pentium | pentium-mmx | pentiumpro | pentium[[234]] | \
- athlon | athlon-tbird | athlon-4 | athlon-xp | athlon-mp)
- if test "$ac_with_cpu" != yes; then
- bc_target_cpu=$withval
- fi
- ;;
- esac
- ;;
- powerpc*)
- case $withval in
- powerpc)
- ;;
- powerpc64)
- bc_target_arch=powerpc64
- ;;
- *)
- AC_MSG_WARN([unsupported on invalid arch type])
- bc_target_arch=powerpc
- ;;
- esac
- ;;
- esac
+ BEECRYPT_WITH_ARCH
],[
- ac_with_arch=no
- case $target_cpu in
- alpha*)
- bc_target_arch=alpha
- ;;
- arm*)
- bc_target_arch=arm
- ;;
- i[[3456]]86)
- bc_target_arch=i386
- ;;
- ia64)
- bc_target_arch=ia64
- ;;
- m68k)
- bc_target_arch=m68k
- ;;
- powerpc*)
- bc_target_arch=powerpc
- ;;
- s390x)
- bc_target_arch=s390x
- ;;
- sparc*)
- bc_target_arch=sparc
- ;;
- x86_64)
- bc_target_arch=x86_64
- ;;
- esac
+ BEECRYPT_WITHOUT_ARCH
])
AC_ARG_ENABLE(threads,[ --enable-threads enables multithread support [default=yes]],[
fi
],[ ac_enable_threads=yes])
-AH_TEMPLATE([ENABLE_THREADS],[Define to 1 if you want to enable multithread support])
-
AC_ARG_ENABLE(aio,[ --enable-aio enables asynchronous i/o for entropy gathering [default=yes]],[
if test "$enableval" = no; then
ac_enable_aio=no
fi
],[ac_with_mtmalloc=no])
-AC_ARG_WITH(java,[ --with-java creates the java glue code [default=no]],[
+AC_ARG_WITH(cplusplus,[ --with-cplusplus creates the C++ API code [default=yes]],[
+ if test "$withval" = no; then
+ ac_with_cplusplus=no
+ else
+ ac_with_cplusplus=yes
+ fi
+ ],[ac_with_cplusplus=yes])
+
+AC_ARG_WITH(java,[ --with-java creates the java glue code [default=yes]],[
if test "$withval" = no; then
ac_with_java=no
else
ac_with_java=yes
fi
- ],[ac_with_java=no])
+ ],[ac_with_java=yes])
-AC_ARG_WITH(python,[ --with-python creates the python bindings code [default=no]],[
+AC_ARG_WITH(python,[ --with-python creates the python bindings code [default=yes]],[
if test "$withval" = no; then
ac_with_python=no
else
ac_with_python=yes
fi
- ],[ac_with_python=no])
+ ],[ac_with_python=yes])
# Check for Unix variants
AC_AIX
# Checks for C compiler and preprocessor
AC_PROG_CC
AC_PROG_CPP
+AC_PROG_CXX
+AC_PROG_CXXCPP
+AC_PROG_LD
+AC_PROG_LN_S
AM_PROG_AS
# Checks for compiler characteristics and flags
-if test "$ac_cv_c_compiler_gnu" = yes; then
- BEECRYPT_GNU_CC
-else
- case $target_os in
- aix*)
- BEECRYPT_IBM_CC
- ;;
- hpux*)
- BEECRYPT_HPUX_CC
- ;;
- linux*)
- BEECRYPT_INTEL_CC
- ;;
- solaris*)
- BEECRYPT_SUN_FORTE_CC
- ;;
- osf*)
- BEECRYPT_COMPAQ_CC
- ;;
- esac
-fi
+BEECRYPT_CC
+BEECRYPT_CXX
+
+# Check for stack protection
+BEECRYPT_NOEXECSTACK
# Checks for program flags needed by libtool
-case $target_os in
-aix*)
- case $bc_target_arch in
- powerpc64)
- AR="ar -X64"
- NM="/usr/bin/nm -B -X64"
- ;;
- esac
- ;;
-solaris*)
- case $bc_target_arch in
- sparcv9*)
- LD="/usr/ccs/bin/ld -64"
- ;;
- esac
- ;;
-esac
+BEECRYPT_LIBTOOL
# Checks for further programs
AC_PROG_AWK
AC_PROG_LIBTOOL
# Predefines for autoheader
-AH_TEMPLATE([AIX],[Define to 1 if you are using AIX])
-AH_TEMPLATE([CYGWIN],[Define to 1 if you are using Cygwin])
-AH_TEMPLATE([DARWIN],[Define to 1 if you are using Darwin/MacOS X])
-AH_TEMPLATE([FREEBSD],[Define to 1 if you are using FreeBSD])
-AH_TEMPLATE([HPUX],[Define to 1 if you are using HPUX])
-AH_TEMPLATE([LINUX],[Define to 1 if you are using GNU/Linux])
-AH_TEMPLATE([NETBSD],[Define to 1 if you are using NetBSD])
-AH_TEMPLATE([OPENBSD],[Define to 1 if you are using OpenBSD])
-AH_TEMPLATE([OSF],[Define to 1 if you are using OSF])
-AH_TEMPLATE([QNX],[Define to 1 if you are using QNX])
-AH_TEMPLATE([SCO_UNIX],[Define to 1 if you are using SCO Unix])
-AH_TEMPLATE([SOLARIS],[Define to 1 if you are using Solaris])
-AH_VERBATIM([WIN32],[
-#ifndef WIN32
-#undef WIN32
-#endif
-])
-
-case $target_os in
- aix*)
- AC_DEFINE([AIX])
- ;;
- cygwin*)
- AC_DEFINE([CYGWIN])
- AC_DEFINE([WIN32])
- ;;
- darwin*)
- AC_DEFINE([DARWIN])
- ;;
- freebsd*)
- AC_DEFINE([FREEBSD])
- ;;
- hpux*)
- AC_DEFINE([HPUX])
- ;;
- linux*)
- AC_DEFINE([LINUX])
- ;;
- netbsd*)
- AC_DEFINE([NETBSD])
- ;;
- openbsd*)
- AC_DEFINE([OPENBSD])
- ;;
- osf*)
- AC_DEFINE([OSF])
- ;;
- *qnx)
- AC_DEFINE([QNX])
- ;;
- solaris*)
- AC_DEFINE([SOLARIS])
- ;;
- sysv*uv*)
- AC_DEFINE([SCO_UNIX])
- ;;
- *)
- AC_MSG_WARN([Operating system type $target_os currently not supported and/or tested])
- ;;
-esac
+BEECRYPT_OS_DEFS
AH_TEMPLATE([HAVE_CTYPE_H],[.])
AH_TEMPLATE([HAVE_ERRNO_H],[.])
AH_TEMPLATE([HAVE_TERMIO_H],[.])
AH_TEMPLATE([HAVE_TERMIOS_H],[.])
AH_TEMPLATE([HAVE_TIME_H],[.])
+AH_TEMPLATE([HAVE_DLFCN_H],[.])
AH_TEMPLATE([HAVE_SYS_AUDIOIO_H],[.])
AH_TEMPLATE([HAVE_SYS_IOCTL_H],[.])
AH_TEMPLATE([HAVE_SYS_TIME_H],[.])
AH_TEMPLATE([HAVE_SYS_TYPES_H],[.])
-AH_TEMPLATE([HAVE_THREAD_H],[.])
-AH_TEMPLATE([HAVE_PTHREAD_H],[.])
-AH_TEMPLATE([HAVE_SYNCH_H],[.])
-AH_TEMPLATE([HAVE_SEMAPHORE_H],[.])
-
AH_TEMPLATE([HAVE_AIO_H],[.])
AH_TEMPLATE([HAVE_DEV_AUDIO],[Define to 1 if your system has device /dev/audio])
bc_include_malloc_h=
bc_include_string_h=
bc_include_unistd_h=
+bc_include_dlfcn_h=
if test "$ac_cv_header_stdio_h" = yes; then
bc_include_stdio_h="#include <stdio.h>"
fi
if test "$ac_cv_header_unistd_h" = yes; then
bc_include_unistd_h="#include <unistd.h>"
fi
+if test "$ac_cv_header_dlfcn_h" = yes; then
+ bc_include_dlfcn_h="#include <dlfcn.h>"
+fi
AC_SUBST(INCLUDE_STDIO_H,$bc_include_stdio_h)
AC_SUBST(INCLUDE_STDLIB_H,$bc_include_stdlib_h)
AC_SUBST(INCLUDE_MALLOC_H,$bc_include_malloc_h)
AC_SUBST(INCLUDE_STRING_H,$bc_include_string_h)
AC_SUBST(INCLUDE_UNISTD_H,$bc_include_unistd_h)
+AC_SUBST(INCLUDE_DLFCN_H,$bc_include_dlfcn_h)
-if test "$ac_enable_threads" = yes; then
- AC_CHECK_HEADERS([thread.h pthread.h synch.h semaphore.h])
-fi
+BEECRYPT_DLFCN
+BEECRYPT_MULTITHREAD
# Checks for libraries.
-bc_include_synch_h=
-bc_include_pthread_h=
-bc_typedef_bc_lock_t=
-if test "$ac_enable_threads" = yes; then
- if test "$ac_cv_header_thread_h" = yes -a "$ac_cv_header_synch_h" = yes; then
- AC_SEARCH_LIBS([mutex_lock],[thread],[
- AC_DEFINE([ENABLE_THREADS],1)
- bc_include_synch_h="#include <synch.h>"
- bc_typedef_bc_lock_t="typedef mutex_t bc_lock_t;"
- ])
- elif test "$ac_cv_header_pthread_h" = yes; then
- AC_SEARCH_LIBS([pthread_mutex_lock],[pthread],[
- AC_DEFINE([ENABLE_THREADS],1)
- bc_include_pthread_h="#include <pthread.h>"
- bc_typedef_bc_lock_t="typedef pthread_mutex_t bc_lock_t;"
- # On most systems this tests will say 'none required', but that doesn't
- # mean that the linked code will work correctly!
- case $target_os in
- linux* | solaris* )
- LIBS="-lpthread $LIBS"
- ;;
- esac
- ])
- else
- AC_MSG_WARN([Don't know which thread library to check for])
- fi
-fi
-AC_SUBST(INCLUDE_SYNCH_H,$bc_include_synch_h)
-AC_SUBST(INCLUDE_PTHREAD_H,$bc_include_pthread_h)
-AC_SUBST(TYPEDEF_BC_LOCK_T,$bc_typedef_bc_lock_t)
-
if test "$ac_enable_aio" = yes; then
BEECRYPT_WORKING_AIO
if test "$bc_cv_aio_works" = yes; then
AH_TEMPLATE([HAVE_GETHRTIME],[.])
AH_TEMPLATE([HAVE_GETTIMEOFDAY],[.])
if test "$ac_cv_header_sys_time_h" = yes; then
- AC_CHECK_FUNCS([gethrtime gettimeofday])
+ AC_CHECK_FUNCS([gethrtime])
+ # gettimeofday detection fails on HP/UX!
+ AC_MSG_CHECKING([for gettimeofday])
+ AC_TRY_LINK([#include <sys/time.h> ],[
+ struct timeval dummy;
+ gettimeofday(&dummy, (void*) 0);
+ ],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_GETTIMEOFDAY],1)
+ ac_cv_func_gettimeofday=yes
+ ],[
+ AC_MSG_RESULT([no])
+ AC_DEFINE([HAVE_GETTIMEOFDAY],0)
+ ac_cv_func_gettimeofday=no
+ ])
fi
+# Predefines and checks for C++ API support
+AH_TEMPLATE([CPPGLUE],[Define to 1 if you want to include the C++ code])
+
+if test "$ac_with_cplusplus" = yes; then
+ AC_MSG_CHECKING([for IBM's ICU library])
+ AC_TRY_LINK([#include <unicode/uversion.h> ],[
+ ],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_WARN([disabling cplusplus])
+ ac_with_cplusplus=no
+ ])
+fi
+
+if test "$ac_with_cplusplus" = yes ; then
+ AC_DEFINE([CPPGLUE],1)
+fi
+
+
# Predefines and checks for Java API support
AH_TEMPLATE([JAVAGLUE],[Define to 1 if you want to include the Java code])
cygwin*)
ac_cv_java_include="-I$java_include -I$java_include/win32" ;;
darwin*) ;;
+ hpux*)
+ ac_cv_java_include="-I$java_include -I$java_include/hpux" ;;
linux*)
ac_cv_java_include="-I$java_include -I$java_include/linux" ;;
osf*)
if test "$ac_with_java" = yes ; then
AC_DEFINE([JAVAGLUE],1)
+ AC_SUBST(JAVAINC,$ac_cv_java_include)
+fi
+
+
+# Predefines and checks for Python API support
+AH_TEMPLATE([PYTHONGLUE],[Define to 1 if you want to include the Python code])
+
+if test "$ac_with_python" = yes ; then
+ AC_CHECK_PROG(ac_cv_have_python, python, yes, no)
+ if test "$ac_cv_have_python" = yes; then
+ AC_CACHE_CHECK([for python headers], ac_cv_python_include, [
+ ac_cv_python_include="-I`python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_inc()'`"
+ ])
+ AC_CACHE_CHECK([for python libraries], ac_cv_python_libdir, [
+ ac_cv_python_libdir="`python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib()'`"
+ ])
+ else
+ ac_with_python=no
+ fi
+fi
+
+if test "$ac_with_python" = yes; then
+ AC_DEFINE([PYTHONGLUE],1)
+ AC_SUBST(PYTHONINC,$ac_cv_python_include)
+ AC_SUBST(PYTHONLIB,$ac_cv_python_libdir)
fi
+
# Checks for entropy sources.
AS_MESSAGE(checking for specific entropy devices...)
case $target_os in
m68k)
CPPFLAGS="$CPPFLAGS -DOPTIMIZE_M68K"
;;
- pentium | pentium-mmx)
+ pentium)
CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I586"
;;
+ pentium-mmx)
+ CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I586 -DOPTIMIZE_MMX"
+ ;;
pentiumpro)
CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I686"
;;
CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I686 -DOPTIMIZE_MMX -DOPTIMIZE_SSE"
;;
pentium4)
- CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I686 -DOPTIMIZE_MMX -DOPTIMIZE_SSE -DOPTIMIZE_SSE2"
+ CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I686 -DOPTIMIZE_MMX -DOPTIMIZE_SSE -DOPTIMIZE_SSE2"
;;
powerpc)
CPPFLAGS="$CPPFLAGS -DOPTIMIZE_POWERPC"
BEECRYPT_INT_TYPES
BEECRYPT_CPU_BITS
-if test "$ac_with_java" = yes ; then
- CFLAGS="$CFLAGS $ac_cv_java_include"
-fi
+MAYBE_SUB=
+MAYBE_LTLIB=
-MAYBE_OPT=
+if test "$ac_with_cplusplus" = yes; then
+ MAYBE_SUB="$MAYBE_SUB c++"
+ MAYBE_LTLIB="$MAYBE_LTLIB libbeecrypt_cxx.la"
+fi
if test "$ac_with_java" = yes; then
- MAYBE_OPT="$MAYBE_OPT java"
+ MAYBE_SUB="$MAYBE_SUB java"
+ MAYBE_LTLIB="$MAYBE_LTLIB libbeecrypt_java.la"
fi
if test "$ac_with_python" = yes; then
- MAYBE_OPT="$MAYBE_OPT python"
+ MAYBE_SUB="$MAYBE_SUB python"
fi
-AC_SUBST([MAYBE_OPT])
-
+AC_SUBST([MAYBE_SUB])
+AC_SUBST([MAYBE_LTLIB])
+
# Check where to install the libraries
bc_libalt=
case $target_os in
case $bc_target_arch in
alpha* | powerpc64 | s390x | x86_64)
bc_libalt="64"
- ;;
- esac
+ ;;
+ esac
;;
esac
AC_SUBST(LIBALT,$bc_libalt)
# Generate output files.
-AC_CONFIG_FILES([Makefile
- Doxyfile
- beecrypt.gnu.h
- config.m4
- docs/Makefile
- gas/Makefile
- java/Makefile
- masm/Makefile
- python/Makefile
- python/test/Makefile
- tests/Makefile])
+AC_CONFIG_FILES([
+ Makefile
+ Doxyfile
+ config.m4
+ c++/Makefile
+ c++/beeyond/Makefile
+ c++/crypto/Makefile
+ c++/crypto/interfaces/Makefile
+ c++/crypto/spec/Makefile
+ c++/io/Makefile
+ c++/lang/Makefile
+ c++/provider/Makefile
+ c++/security/Makefile
+ c++/security/cert/Makefile
+ c++/security/interfaces/Makefile
+ c++/security/spec/Makefile
+ c++/util/Makefile
+ docs/Makefile
+ gas/Makefile
+ java/Makefile
+ masm/Makefile
+ python/Makefile
+ python/test/Makefile
+ tests/Makefile
+ ])
+AC_CONFIG_FILES([gnu.h],[
+ if test $srcdir != "."; then
+ cp gnu.h $ac_top_srcdir/gnu.h
+ fi
+ ])
+AC_CONFIG_COMMANDS_POST([
+ if test -h "beecrypt"; then
+ rm -f beecrypt
+ fi
+ $LN_S $srcdir beecrypt
+ ])
AC_OUTPUT
--- /dev/null
+/*
+ * Copyright (c) 2004 Bob Deblier
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/mpnumber.h"
+#include "beecrypt/mpbarrett.h"
+#include "beecrypt/dldp.h"
+#include "beecrypt/dlkp.h"
+#include "beecrypt/dlpk.h"
+#include "beecrypt/rsakp.h"
+#include "beecrypt/rsapk.h"
+
+#include <iomanip>
+
+#if CPPGLUE
+
+mpnumber::mpnumber()
+{
+ mpnzero(this);
+}
+
+mpnumber::mpnumber(unsigned int value)
+{
+ mpnsize(this, 1);
+ mpnsetw(this, value);
+}
+
+mpnumber::mpnumber(const mpnumber& copy)
+{
+ mpnzero(this);
+ mpncopy(this, ©);
+}
+
+mpnumber::~mpnumber()
+{
+ mpnfree(this);
+}
+
+const mpnumber& mpnumber::operator=(const mpnumber& copy)
+{
+ mpncopy(this, ©);
+ return *this;
+}
+
+bool mpnumber::operator==(const mpnumber& cmp)
+{
+ return mpeqx(size, data, cmp.size, cmp.data);
+}
+
+bool mpnumber::operator!=(const mpnumber& cmp)
+{
+ return mpnex(size, data, cmp.size, cmp.data);
+}
+
+void mpnumber::wipe()
+{
+ mpnwipe(this);
+}
+
+size_t mpnumber::bitlength() const
+{
+ return mpbits(size, data);
+}
+
+std::ostream& operator<<(std::ostream& stream, const mpnumber& n)
+{
+ if (n.size)
+ {
+ stream << std::hex << std::setfill('0') << n.data[0];
+ for (size_t i = 1; i < n.size; i++)
+ stream << std::setw(MP_WNIBBLES) << n.data[i];
+ }
+
+ return stream;
+}
+
+/*
+std::istream& operator>>(std:istream& stream, mpnumber& n)
+{
+}
+*/
+
+mpbarrett::mpbarrett()
+{
+ mpbzero(this);
+}
+
+mpbarrett::mpbarrett(const mpbarrett& copy)
+{
+ mpbzero(this);
+ mpbcopy(this, ©);
+}
+
+mpbarrett::~mpbarrett()
+{
+ mpbfree(this);
+}
+
+const mpbarrett& mpbarrett::operator=(const mpbarrett& copy)
+{
+ mpbcopy(this, ©);
+ return *this;
+}
+
+bool mpbarrett::operator==(const mpbarrett& cmp)
+{
+ return mpeqx(size, modl, cmp.size, cmp.modl);
+}
+
+bool mpbarrett::operator!=(const mpbarrett& cmp)
+{
+ return mpnex(size, modl, cmp.size, cmp.modl);
+}
+
+void mpbarrett::wipe()
+{
+ mpbwipe(this);
+}
+
+size_t mpbarrett::bitlength() const
+{
+ return mpbits(size, modl);
+}
+
+std::ostream& operator<<(std::ostream& stream, const mpbarrett& b)
+{
+ stream << std::hex << std::setfill('0');
+
+ for (size_t i = 0; i < b.size; i++)
+ stream << std::setw(MP_WNIBBLES) << b.modl[i];
+
+ return stream;
+}
+
+dldp_p::dldp_p()
+{
+ dldp_pInit(this);
+}
+
+dldp_p::dldp_p(const dldp_p& copy)
+{
+ dldp_pInit(this);
+ dldp_pCopy(this, ©);
+}
+
+dldp_p::~dldp_p()
+{
+ dldp_pFree(this);
+}
+
+dlkp_p::dlkp_p()
+{
+ dlkp_pInit(this);
+}
+
+dlkp_p::dlkp_p(const dlkp_p& copy)
+{
+ dlkp_pInit(this);
+ dlkp_pCopy(this, ©);
+}
+
+dlkp_p::~dlkp_p()
+{
+ dlkp_pFree(this);
+}
+
+dlpk_p::dlpk_p()
+{
+ dlpk_pInit(this);
+}
+
+dlpk_p::dlpk_p(const dlpk_p& copy)
+{
+ dlpk_pInit(this);
+ dlpk_pCopy(this, ©);
+}
+
+dlpk_p::~dlpk_p()
+{
+ dlpk_pFree(this);
+}
+
+rsakp::rsakp()
+{
+ rsakpInit(this);
+}
+
+rsakp::rsakp(const rsakp& copy)
+{
+ rsakpInit(this);
+ rsakpCopy(this, ©);
+}
+
+rsakp::~rsakp()
+{
+ rsakpFree(this);
+}
+
+rsapk::rsapk()
+{
+ rsapkInit(this);
+}
+
+rsapk::rsapk(const rsapk& copy)
+{
+ rsapkInit(this);
+ rsapkCopy(this, ©);
+}
+
+rsapk::~rsapk()
+{
+ rsapkFree(this);
+}
+
+blockCipherContext::blockCipherContext()
+{
+ blockCipherContextInit(this, blockCipherDefault());
+}
+
+blockCipherContext::blockCipherContext(const blockCipher* b)
+{
+ blockCipherContextInit(this, b);
+}
+
+blockCipherContext::~blockCipherContext()
+{
+ blockCipherContextFree(this);
+}
+
+hashFunctionContext::hashFunctionContext()
+{
+ hashFunctionContextInit(this, hashFunctionDefault());
+}
+
+hashFunctionContext::hashFunctionContext(const hashFunction* h)
+{
+ hashFunctionContextInit(this, h);
+}
+
+hashFunctionContext::~hashFunctionContext()
+{
+ hashFunctionContextFree(this);
+}
+
+keyedHashFunctionContext::keyedHashFunctionContext()
+{
+ keyedHashFunctionContextInit(this, keyedHashFunctionDefault());
+}
+
+keyedHashFunctionContext::keyedHashFunctionContext(const keyedHashFunction* k)
+{
+ keyedHashFunctionContextInit(this, k);
+}
+
+keyedHashFunctionContext::~keyedHashFunctionContext()
+{
+ keyedHashFunctionContextFree(this);
+}
+
+randomGeneratorContext::randomGeneratorContext()
+{
+ randomGeneratorContextInit(this, randomGeneratorDefault());
+}
+
+randomGeneratorContext::randomGeneratorContext(const randomGenerator* rng)
+{
+ randomGeneratorContextInit(this, rng);
+}
+
+randomGeneratorContext::~randomGeneratorContext()
+{
+ randomGeneratorContextFree(this);
+}
+
+#endif
+++ /dev/null
-/**
- * To be included after all other includes.
- */
-#ifndef H_DEBUG
-#define H_DEBUG
-
-#include <assert.h>
-
-#ifdef DMALLOC
-#include <dmalloc.h>
-#endif
-
-#endif /* H_DEBUG */
-/*@-compdef@*/
/*
* Copyright (c) 2000, 2001, 2002 Virtual Unlimited, B.V.
*
/*!\file dhaes.c
* \brief DHAES encryption scheme.
- *
- * This code implements the encryption scheme from the paper:
- *
- * "DHAES: An Encryption Scheme Based on the Diffie-Hellman Problem"
- * Michel Abdalla, Mihir Bellare, Phillip Rogaway
- * September 1998
- *
+ * \author Bob Deblier <bob.deblier@pandora.be>
+ * \ingroup DL_m DL_dh_m
+ */
+
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/dhaes.h"
+#include "beecrypt/dlsvdp-dh.h"
+#include "beecrypt/blockmode.h"
+#include "beecrypt/blockpad.h"
+
+/*
* Good combinations will be:
*
- * - For 64-bit encryption:
- * - DHAES(MD5, Blowfish, HMAC-MD5) <- best candidate
- * - DHAES(MD5, Blowfish, HMAC-SHA-1)
- * - DHAES(MD5, Blowfish, HMAC-SHA-256)
+ * For 64-bit encryption:
+ * DHAES(MD5, Blowfish, HMAC-MD5) <- best candidate
+ * DHAES(MD5, Blowfish, HMAC-SHA-1)
+ * DHAES(MD5, Blowfish, HMAC-SHA-256)
*
- * - For 96-bit encryption with 64-bit mac:
- * - DHAES(SHA-1, Blowfish, HMAC-MD5, 96)
- * - DHAES(SHA-1, Blowfish, HMAC-SHA-1, 96) <- best candidate
- * - DHAES(SHA-1, Blowfish, HMAC-SHA-256, 96) <- best candidate
+ * For 96-bit encryption with 64-bit mac:
+ * DHAES(SHA-1, Blowfish, HMAC-MD5, 96)
+ * DHAES(SHA-1, Blowfish, HMAC-SHA-1, 96) <- best candidate
+ * DHAES(SHA-1, Blowfish, HMAC-SHA-256, 96) <- best candidate
*
- * - For 128-bit encryption:
- * - DHAES(SHA-256, Blowfish, HMAC-MD5)
- * - DHAES(SHA-256, Blowfish, HMAC-SHA-1)
- * - DHAES(SHA-256, Blowfish, HMAC-SHA-256)
+ * For 128-bit encryption:
+ * DHAES(SHA-256, Blowfish, HMAC-MD5)
+ * DHAES(SHA-256, Blowfish, HMAC-SHA-1)
+ * DHAES(SHA-256, Blowfish, HMAC-SHA-256)
*/
-#include "system.h"
-#include "dhaes.h"
-#include "dlsvdp-dh.h"
-#include "blockmode.h"
-#include "blockpad.h"
-#include "debug.h"
-
int dhaes_pUsable(const dhaes_pParameters* params)
{
size_t keybits = (params->hash->digestsize << 3); /* digestsize in bytes times 8 bits */
/* test if keybits length is appropriate for mac */
if ((mackeybits < params->mac->keybitsmin) ||
- (((unsigned)params->mackeybits) > params->mac->keybitsmax))
+ (params->mackeybits > params->mac->keybitsmax))
return 0;
if (((mackeybits - params->mac->keybitsmin) % params->mac->keybitsinc) != 0)
if (!dhaes_pUsable(params))
return -1;
- (void) dldp_pInit(&ctxt->param);
- (void) dldp_pCopy(&ctxt->param, params->param);
+ dldp_pInit(&ctxt->param);
+ dldp_pCopy(&ctxt->param, params->param);
mpnzero(&ctxt->pub);
mpnzero(&ctxt->pri);
- /*@-modobserver@*/
if (hashFunctionContextInit(&ctxt->hash, params->hash))
return -1;
if (keyedHashFunctionContextInit(&ctxt->mac, params->mac))
return -1;
- /*@=modobserver@*/
ctxt->cipherkeybits = params->cipherkeybits;
ctxt->mackeybits = params->mackeybits;
int dhaes_pContextFree(dhaes_pContext* ctxt)
{
- (void) dldp_pFree(&ctxt->param);
+ dldp_pFree(&ctxt->param);
mpnfree(&ctxt->pub);
mpnfree(&ctxt->pri);
- /*@-mustfree -modobserver @*/ /* ctxt is OK */
if (hashFunctionContextFree(&ctxt->hash))
return -1;
return -1;
return 0;
- /*@=mustfree =modobserver @*/
}
-/**
- */
-static int dhaes_pContextSetup(dhaes_pContext* ctxt, const mpnumber* privkey, const mpnumber* pubkey, const mpnumber* message, cipherOperation op)
- /*@modifies ctxt @*/
+static int dhaes_pContextSetup(dhaes_pContext* ctxt, const mpnumber* private, const mpnumber* public, const mpnumber* message, cipherOperation op)
{
register int rc;
/* compute the shared secret, Diffie-Hellman style */
mpnzero(&secret);
- if (dlsvdp_pDHSecret(&ctxt->param, privkey, pubkey, &secret))
+ if (dlsvdp_pDHSecret(&ctxt->param, private, public, &secret))
{
mpnfree(&secret);
free(digest);
}
/* compute the hash of the message (ephemeral public) key and the shared secret */
- (void) hashFunctionContextReset (&ctxt->hash);
- (void) hashFunctionContextUpdateMP(&ctxt->hash, message);
- (void) hashFunctionContextUpdateMP(&ctxt->hash, &secret);
- (void) hashFunctionContextDigest (&ctxt->hash, digest);
+
+ hashFunctionContextReset (&ctxt->hash);
+ hashFunctionContextUpdateMP(&ctxt->hash, message);
+ hashFunctionContextUpdateMP(&ctxt->hash, &secret);
+ hashFunctionContextDigest (&ctxt->hash, digest);
/* we don't need the secret anymore */
mpnwipe(&secret);
* size requirements.
*/
- /*@-usedef@*/ /* LCL: digest already set */
if (ctxt->hash.algo->digestsize > 0)
{
byte* mackey = digest;
- byte* cipherkey = digest + ((unsigned)(ctxt->mackeybits + 7) >> 3);
+ byte* cipherkey = digest + ((ctxt->mackeybits + 7) >> 3);
if ((rc = keyedHashFunctionContextSetup(&ctxt->mac, mackey, ctxt->mackeybits)))
goto setup_end;
}
else
rc = -1;
- /*@=usedef@*/
setup_end:
/* wipe digest for good measure */
memset(digest, 0, ctxt->hash.algo->digestsize);
free(digest);
- /*@-mustfree@*/ /* {secret,digest}.data are OK */
return rc;
- /*@=mustfree@*/
}
memchunk* dhaes_pContextEncrypt(dhaes_pContext* ctxt, mpnumber* ephemeralPublicKey, mpnumber* mac, const memchunk* cleartext, randomGeneratorContext* rng)
/* make the ephemeral keypair */
mpnzero(&ephemeralPrivateKey);
- (void) dldp_pPair(&ctxt->param, rng, &ephemeralPrivateKey, ephemeralPublicKey);
+ dldp_pPair(&ctxt->param, rng, &ephemeralPrivateKey, ephemeralPublicKey);
/* Setup the key and initialize the mac and the blockcipher */
if (dhaes_pContextSetup(ctxt, &ephemeralPrivateKey, &ctxt->pub, ephemeralPublicKey, ENCRYPT))
/* add pkcs-5 padding */
paddedtext = pkcs5PadCopy(ctxt->cipher.algo->blocksize, cleartext);
- if (paddedtext == (memchunk*) 0)
- goto encrypt_end;
/* encrypt the memchunk in CBC mode */
if (blockEncryptCBC(ctxt->cipher.algo, ctxt->cipher.param, (uint32_t*) paddedtext->data, (const uint32_t*) paddedtext->data, paddedtext->size / ctxt->cipher.algo->blocksize))
mpnwipe(&ephemeralPrivateKey);
mpnfree(&ephemeralPrivateKey);
- /*@-mustfree@*/ /* ephemeralPrivateKey.data is OK */
return ciphertext;
- /*@=mustfree@*/
}
memchunk* dhaes_pContextDecrypt(dhaes_pContext* ctxt, const mpnumber* ephemeralPublicKey, const mpnumber* mac, const memchunk* ciphertext)
goto decrypt_end;
/* decrypt the memchunk with CBC mode */
- paddedtext = (memchunk*) calloc(1, sizeof(*paddedtext));
+ paddedtext = (memchunk*) calloc(1, sizeof(memchunk));
if (paddedtext == (memchunk*) 0)
goto decrypt_end;
paddedtext->size = ciphertext->size;
- /*@-mustfree@*/ /* paddedtext->data is OK */
paddedtext->data = (byte*) malloc(ciphertext->size);
- /*@=mustfree@*/
if (paddedtext->data == (byte*) 0)
{
decrypt_end:
- /*@-usereleased@*/ /* LCL: cleartext released??? */
return cleartext;
- /*@=usereleased@*/
}
-/*@=compdef@*/
#ifndef _DHAES_H
#define _DHAES_H
-#include "beecrypt.h"
-#include "dldp.h"
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/dldp.h"
-/**
- */
typedef struct
{
- const dldp_p* param;
- const hashFunction* hash;
- const blockCipher* cipher;
+ const dldp_p* param;
+ const hashFunction* hash;
+ const blockCipher* cipher;
const keyedHashFunction* mac;
- size_t cipherkeybits;
- size_t mackeybits;
+ size_t cipherkeybits;
+ size_t mackeybits;
} dhaes_pParameters;
-/**
- */
typedef struct
{
- dldp_p param;
- mpnumber pub;
- mpnumber pri;
- hashFunctionContext hash;
- blockCipherContext cipher;
+ dldp_p param;
+ mpnumber pub;
+ mpnumber pri;
+ hashFunctionContext hash;
+ blockCipherContext cipher;
keyedHashFunctionContext mac;
- size_t cipherkeybits;
- size_t mackeybits;
+ size_t cipherkeybits;
+ size_t mackeybits;
} dhaes_pContext;
#ifdef __cplusplus
extern "C" {
#endif
-/**
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-int dhaes_pUsable(const dhaes_pParameters* params)
- /*@*/;
-/*@=exportlocal@*/
+int dhaes_pUsable(const dhaes_pParameters*);
-/**
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-int dhaes_pContextInit (/*@special@*/ dhaes_pContext* ctxt, const dhaes_pParameters* params)
- /*@defines ctxt->hash, ctxt->cipher, ctxt->mac @*/
- /*@modifies ctxt @*/;
-/*@=exportlocal@*/
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dhaes_pContextInitDecrypt(dhaes_pContext* ctxt, const dhaes_pParameters* params, const mpnumber* pri)
- /*@modifies ctxt @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dhaes_pContextInitEncrypt(dhaes_pContext* ctxt, const dhaes_pParameters* params, const mpnumber* pub)
- /*@modifies ctxt @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dhaes_pContextFree (/*@only@*/ dhaes_pContext* ctxt)
- /*@modifies ctxt @*/;
-
-/**
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
-memchunk* dhaes_pContextEncrypt(dhaes_pContext* ctxt, mpnumber* ephemeralPublicKey, mpnumber* mac, const memchunk* cleartext, randomGeneratorContext* rng)
- /*@modifies ctxt, ephemeralPublicKey, mac, rng @*/;
+int dhaes_pContextInit (dhaes_pContext*, const dhaes_pParameters*);
+BEECRYPTAPI
+int dhaes_pContextInitDecrypt(dhaes_pContext*, const dhaes_pParameters*, const mpnumber*);
+BEECRYPTAPI
+int dhaes_pContextInitEncrypt(dhaes_pContext*, const dhaes_pParameters*, const mpnumber*);
+BEECRYPTAPI
+int dhaes_pContextFree (dhaes_pContext*);
-/**
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
-memchunk* dhaes_pContextDecrypt(dhaes_pContext* ctxt, const mpnumber* ephemeralPublicKey, const mpnumber* mac, const memchunk* ciphertext)
- /*@modifies ctxt @*/;
+BEECRYPTAPI
+memchunk* dhaes_pContextEncrypt(dhaes_pContext*, mpnumber*, mpnumber*, const memchunk*, randomGeneratorContext*);
+BEECRYPTAPI
+memchunk* dhaes_pContextDecrypt(dhaes_pContext*, const mpnumber*, const mpnumber*, const memchunk*);
#ifdef __cplusplus
}
* \ingroup DL_m
*/
-#include "system.h"
-#include "dldp.h"
-#include "mp.h"
-#include "mpprime.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
-/*!\addtogroup DL_m
- * \{
- */
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
-/**
- */
-static int dldp_pgoqGenerator_w(dldp_p* dp, randomGeneratorContext* rgc, /*@out@*/ mpw* wksp)
- /*@modifies dp->g, wksp @*/;
+#include "beecrypt/dldp.h"
+#include "beecrypt/mp.h"
+#include "beecrypt/mpprime.h"
-/**
+/*!\addtogroup DL_m
+ * \{
*/
-static int dldp_pgonGenerator_w(dldp_p* dp, randomGeneratorContext* rgc, /*@out@*/ mpw* wksp)
- /*@modifies dp->g, wksp @*/;
+static int dldp_pgoqGenerator_w(dldp_p*, randomGeneratorContext*, mpw*);
+static int dldp_pgonGenerator_w(dldp_p*, randomGeneratorContext*, mpw*);
int dldp_pPrivate(const dldp_p* dp, randomGeneratorContext* rgc, mpnumber* x)
{
return 0;
}
+int dldp_pPrivate_s(const dldp_p* dp, randomGeneratorContext* rgc, mpnumber* x, size_t xbits)
+{
+ /*
+ * Note: the private key is randomly selected smaller than q with xbits < mpbits(q)
+ *
+ */
+
+ mpbnrnd(&dp->q, rgc, x);
+ mpntrbits(x, xbits);
+
+ return 0;
+}
+
int dldp_pPublic(const dldp_p* dp, const mpnumber* x, mpnumber* y)
{
/*
return 0;
}
+int dldp_pPair_s(const dldp_p* dp, randomGeneratorContext* rgc, mpnumber* x, mpnumber* y, size_t xbits)
+{
+ mpbnrnd(&dp->q, rgc, x);
+ mpntrbits(x, xbits);
+ mpbnpowmod(&dp->p, &dp->g, x, y);
+
+ return 0;
+}
+
int dldp_pEqual(const dldp_p* a, const dldp_p* b)
{
return mpeqx(a->p.size, a->p.modl, b->p.size, b->p.modl) &&
mpeqx(a->g.size, a->g.data, b->g.size, b->g.data);
}
-/**
+/*
* needs to make workspace of 8*size+2
*/
-static int dldp_pValidate(const dldp_p* dp, randomGeneratorContext* rgc)
- /*@*/
+int dldp_pValidate(const dldp_p* dp, randomGeneratorContext* rgc)
{
register size_t size = dp->p.size;
- register mpw* temp = (mpw*) malloc((8*size+2) * sizeof(*temp));
+
+ register mpw* temp = (mpw*) malloc((8*size+2) * sizeof(mpw));
if (temp)
{
int dldp_pFree(dldp_p* dp)
{
- /*@-usedef -compdef@*/
mpbfree(&dp->p);
mpbfree(&dp->q);
mpnfree(&dp->g);
mpnfree(&dp->r);
mpbfree(&dp->n);
- /*@=usedef =compdef@*/
return 0;
}
* Generate parameters as described by IEEE P1363, A.16.1
*/
register size_t psize = MP_BITS_TO_WORDS(pbits + MP_WBITS - 1);
- register mpw* temp = (mpw*) malloc((8*psize+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((8*psize+2) * sizeof(mpw));
if (temp)
{
/* clear g */
mpnzero(&dp->g);
- (void) dldp_pgoqGenerator_w(dp, rgc, temp);
+ dldp_pgoqGenerator_w(dp, rgc, temp);
free(temp);
*/
register size_t size = MP_BITS_TO_WORDS(bits + MP_WBITS - 1);
- register mpw* temp = (mpw*) malloc((8*size+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((8*size+2) * sizeof(mpw));
if (temp)
{
/* clear n */
mpbzero(&dp->n);
- (void) dldp_pgoqGenerator_w(dp, rgc, temp);
+ dldp_pgoqGenerator_w(dp, rgc, temp);
free(temp);
int dldp_pgoqGenerator(dldp_p* dp, randomGeneratorContext* rgc)
{
register size_t size = dp->p.size;
- register mpw* temp = (mpw*) malloc((4*size+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((4*size+2)*sizeof(mpw));
if (temp)
{
- (void) dldp_pgoqGenerator_w(dp, rgc, temp);
+ dldp_pgoqGenerator_w(dp, rgc, temp);
free(temp);
return -1;
}
-int dldp_pgoqValidate(const dldp_p* dp, randomGeneratorContext* rgc, /*@unused@*/ int cofactor)
+int dldp_pgoqValidate(const dldp_p* dp, randomGeneratorContext* rgc, int cofactor)
{
register int rc = dldp_pValidate(dp, rgc);
*/
register size_t psize = MP_BITS_TO_WORDS(pbits + MP_WBITS - 1);
- register mpw* temp = (mpw*) malloc((8*psize+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((8*psize+2) * sizeof(mpw));
if (temp)
{
mpbsubone(&dp->p, temp);
mpbset(&dp->n, psize, temp);
- (void) dldp_pgonGenerator_w(dp, rgc, temp);
+ dldp_pgonGenerator_w(dp, rgc, temp);
free(temp);
*/
register size_t psize = MP_BITS_TO_WORDS(pbits + MP_WBITS - 1);
- register mpw* temp = (mpw*) malloc((8*psize+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((8*psize+2) * sizeof(mpw));
if (temp)
{
/* set r = 2 */
mpnsetw(&dp->r, 2);
- (void) dldp_pgonGenerator_w(dp, rgc, temp);
+ dldp_pgonGenerator_w(dp, rgc, temp);
free(temp);
int dldp_pgonGenerator(dldp_p* dp, randomGeneratorContext* rgc)
{
register size_t psize = dp->p.size;
- register mpw* temp = (mpw*) malloc((8*psize+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((8*psize+2) * sizeof(mpw));
if (temp)
{
- (void) dldp_pgonGenerator_w(dp, rgc, temp);
+ dldp_pgonGenerator_w(dp, rgc, temp);
free(temp);
/*!\file dldp.h
* \brief Discrete Logarithm domain parameters, headers.
- * \author Bob Deblier <bob@virtualunlimited.com>
+ * \author Bob Deblier <bob.deblier@pandora.be>
* \ingroup DL_m
*/
#ifndef _DLDP_H
#define _DLDP_H
-#include "mpbarrett.h"
+#include "beecrypt/mpbarrett.h"
-/**
+/*
* Discrete Logarithm Domain Parameters - Prime
*
* Standard definition where p = qr+1; in case where p=2q+1, r=2
* g is either a generator of a subgroup of order q, or a generator of order
* n = (p-1)
*/
-typedef struct
+
+/*!\brief Discrete Logarithm Domain Parameters over a prime field.
+ *
+ * For the variables in this structure /f$p=qr+1/f$; if /f$p=2q+1 then r=2/f$.
+ *
+ * \ingroup DL_m
+ */
+#ifdef __cplusplus
+struct BEECRYPTAPI dldp_p
+#else
+struct _dldp_p
+#endif
{
+ /*!\var p
+ * \brief The prime.
+ *
+ */
mpbarrett p;
+ /*!\var q
+ * \brief The cofactor.
+ *
+ * \f$q\f$ is a prime divisor of \f$p-1\f$.
+ */
mpbarrett q;
- mpnumber r;
- mpnumber g;
+ /*!\var r
+ *
+ * \f$p=qr+1\f$
+ */
+ mpnumber r;
+ /*!\var g
+ * \brief The generator.
+ *
+ * \f$g\f$ is either a generator of \f$\mathds{Z}^{*}_p\f$, or a generator
+ * of a cyclic subgroup \f$G\f$ of \f$\mathds{Z}^{*}_p\f$ of order \f$q\f$.
+ */
+ mpnumber g;
+ /*!\var n
+ *
+ * \f$n=p-1=qr\f$
+ */
mpbarrett n;
-} dldp_p;
+#ifdef __cplusplus
+ dldp_p();
+ dldp_p(const dldp_p&);
+ ~dldp_p();
+#endif
+};
+
+#ifndef __cplusplus
+typedef struct _dldp_p dldp_p;
+#endif
#ifdef __cplusplus
extern "C" {
#endif
-/**
+/*
+ * Functions for setting up and copying
*/
-BEECRYPTAPI
-int dldp_pInit(dldp_p* dp)
- /*@modifies dp->p, dp->q, dp->r, dp->g, dp->n @*/;
-/**
- */
BEECRYPTAPI
-int dldp_pFree(/*@special@*/ dldp_p* dp)
- /*@releases dp->p.modl, dp->q.modl, dp->n.modl @*/
- /*@modifies dp->p, dp->q, dp->r, dp->g, dp->n @*/;
-
-/**
- */
+int dldp_pInit(dldp_p*);
BEECRYPTAPI
-int dldp_pCopy(dldp_p* dst, const dldp_p* src)
- /*@modifies dst @*/;
+int dldp_pFree(dldp_p*);
+BEECRYPTAPI
+int dldp_pCopy(dldp_p*, const dldp_p*);
/*
* Functions for generating keys
*/
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pPrivate(const dldp_p* dp, randomGeneratorContext* rgc, mpnumber* x)
- /*@modifies rgc, x @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pPublic(const dldp_p* dp, const mpnumber* x, mpnumber* y)
- /*@modifies y @*/;
-
-/**
- */
BEECRYPTAPI
-int dldp_pPair(const dldp_p* dp, randomGeneratorContext* rgc, mpnumber* x, mpnumber* y)
- /*@modifies rgc, x, y @*/;
+int dldp_pPrivate (const dldp_p*, randomGeneratorContext*, mpnumber*);
+BEECRYPTAPI
+int dldp_pPrivate_s(const dldp_p*, randomGeneratorContext*, mpnumber*, size_t);
+BEECRYPTAPI
+int dldp_pPublic (const dldp_p*, const mpnumber*, mpnumber*);
+BEECRYPTAPI
+int dldp_pPair (const dldp_p*, randomGeneratorContext*, mpnumber*, mpnumber*);
+BEECRYPTAPI
+int dldp_pPair_s (const dldp_p*, randomGeneratorContext*, mpnumber*, mpnumber*, size_t);
/*
* Function for comparing domain parameters
*/
-
-/**
- */
BEECRYPTAPI
-int dldp_pEqual(const dldp_p* a, const dldp_p* b)
- /*@*/;
+int dldp_pEqual (const dldp_p*, const dldp_p*);
/*
* Functions for generating and validating dldp_pgoq variant domain parameters
*/
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pgoqMake(dldp_p* dp, randomGeneratorContext* rgc, size_t pbits, size_t qbits, int cofactor)
- /*@modifies dp, rgc @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pgoqMakeSafe(dldp_p* dp, randomGeneratorContext* rgc, size_t bits)
- /*@modifies dp->p, dp->q, dp->r, dp->g, dp->n, rgc @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pgoqGenerator(dldp_p* dp, randomGeneratorContext* rgc)
- /*@modifies dp->p, dp->q, dp->r, dp->g, dp->n, rgc @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pgoqValidate(const dldp_p*, randomGeneratorContext* rgc, int cofactor)
- /*@modifies rgc @*/;
+BEECRYPTAPI
+int dldp_pgoqMake (dldp_p*, randomGeneratorContext*, size_t, size_t, int);
+BEECRYPTAPI
+int dldp_pgoqMakeSafe (dldp_p*, randomGeneratorContext*, size_t);
+BEECRYPTAPI
+int dldp_pgoqGenerator(dldp_p*, randomGeneratorContext*);
+BEECRYPTAPI
+int dldp_pgoqValidate (const dldp_p*, randomGeneratorContext*, int);
/*
* Functions for generating and validating dldp_pgon variant domain parameters
*/
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pgonMake(dldp_p* dp, randomGeneratorContext* rgc, size_t pbits, size_t qbits)
- /*@modifies dp->p, dp->q, dp->r, dp->g, dp->n, rgc @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pgonMakeSafe(dldp_p* dp, randomGeneratorContext* rgc, size_t pbits)
- /*@modifies dp->p, dp->q, dp->r, dp->g, dp->n, rgc @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pgonGenerator(dldp_p* dp, randomGeneratorContext* rgc)
- /*@modifies dp->p, dp->q, dp->r, dp->g, dp->n, rgc @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dldp_pgonValidate(const dldp_p* dp, randomGeneratorContext* rgc)
- /*@modifies rgc @*/;
+BEECRYPTAPI
+int dldp_pgonMake (dldp_p*, randomGeneratorContext*, size_t, size_t);
+BEECRYPTAPI
+int dldp_pgonMakeSafe (dldp_p*, randomGeneratorContext*, size_t);
+BEECRYPTAPI
+int dldp_pgonGenerator(dldp_p*, randomGeneratorContext*);
+BEECRYPTAPI
+int dldp_pgonValidate (const dldp_p*, randomGeneratorContext*);
#ifdef __cplusplus
}
* \ingroup DL_m
*/
-#include "system.h"
-#include "dlkp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
-/*!\addtogroup DL_m
- * \{
- */
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/dlkp.h"
int dlkp_pPair(dlkp_p* kp, randomGeneratorContext* rgc, const dldp_p* param)
{
int dlkp_pFree(dlkp_p* kp)
{
- /*@-usereleased -compdef @*/ /* kp->param.{p,q,n}.modl is OK */
if (dldp_pFree(&kp->param) < 0)
return -1;
mpnfree(&kp->y);
+ /* wipe secret key before freeing */
+ mpnwipe(&kp->x);
mpnfree(&kp->x);
return 0;
- /*@=usereleased =compdef @*/
}
int dlkp_pCopy(dlkp_p* dst, const dlkp_p* src)
return 0;
}
-
-/*!\}
- */
#ifndef _DLKP_H
#define _DLKP_H
-#include "dlpk.h"
+#include "beecrypt/dlpk.h"
/*!\ingroup DL_m
*/
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI dlkp_p
+#else
+struct _dlkp_p
+#endif
{
dldp_p param;
mpnumber y;
mpnumber x;
-} dlkp_p;
+
+ #ifdef __cplusplus
+ dlkp_p();
+ dlkp_p(const dlkp_p&);
+ ~dlkp_p();
+ #endif
+};
+
+#ifndef __cplusplus
+typedef struct _dlkp_p dlkp_p;
+#endif
#ifdef __cplusplus
extern "C" {
#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlkp_pPair(dlkp_p* kp, randomGeneratorContext* rgc, const dldp_p* param)
- /*@modifies kp, rgc @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlkp_pInit(dlkp_p* kp)
- /*@modifies kp @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlkp_pFree(dlkp_p* kp)
- /*@modifies kp @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlkp_pCopy(dlkp_p* dst, const dlkp_p* src)
- /*@modifies dst @*/;
+BEECRYPTAPI
+int dlkp_pPair(dlkp_p*, randomGeneratorContext*, const dldp_p*);
+BEECRYPTAPI
+int dlkp_pInit(dlkp_p*);
+BEECRYPTAPI
+int dlkp_pFree(dlkp_p*);
+BEECRYPTAPI
+int dlkp_pCopy(dlkp_p*, const dlkp_p*);
#ifdef __cplusplus
}
*
*/
-/*!\file dlpk.c
+/*!\file dlpk.h
* \brief Discrete Logarithm public key.
* \author Bob Deblier <bob.deblier@pandora.be>
* \ingroup DL_m
*/
-#include "system.h"
-#include "dlpk.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/dlpk.h"
/*!\addtogroup DL_m
* \{
int dlpk_pFree(dlpk_p* pk)
{
- /*@-usereleased -compdef @*/ /* pk->param.{p,q,n}.modl is OK */
if (dldp_pFree(&pk->param) < 0)
return -1;
mpnfree(&pk->y);
return 0;
- /*@=usereleased =compdef @*/
}
int dlpk_pCopy(dlpk_p* dst, const dlpk_p* src)
#ifndef _DLPK_H
#define _DLPK_H
-#include "dldp.h"
+#include "beecrypt/dldp.h"
-/**
+/*!\ingroup DL_m
*/
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI dlpk_p
+#else
+struct _dlpk_p
+#endif
{
dldp_p param;
mpnumber y;
-} dlpk_p;
-
#ifdef __cplusplus
-extern "C" {
+ dlpk_p();
+ dlpk_p(const dlpk_p&);
+ ~dlpk_p();
#endif
+};
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlpk_pInit(dlpk_p* pk)
- /*@modifies pk @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlpk_pFree(dlpk_p* pk)
- /*@modifies pk @*/;
+#ifndef __cplusplus
+typedef struct _dlpk_p dlpk_p;
+#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlpk_pCopy(dlpk_p* dst, const dlpk_p* src)
- /*@modifies dst @*/;
+#ifdef __cplusplus
+extern "C" {
+#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlpk_pEqual(const dlpk_p* a, const dlpk_p* b)
- /*@*/;
+BEECRYPTAPI
+int dlpk_pInit(dlpk_p*);
+BEECRYPTAPI
+int dlpk_pFree(dlpk_p*);
+BEECRYPTAPI
+int dlpk_pCopy(dlpk_p*, const dlpk_p*);
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlpk_pgoqValidate(const dlpk_p* pk, randomGeneratorContext* rgc, int cofactor)
- /*@modifies rgc @*/;
+BEECRYPTAPI
+int dlpk_pEqual(const dlpk_p*, const dlpk_p*);
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int dlpk_pgonValidate(const dlpk_p* pk, randomGeneratorContext* rgc)
- /*@modifies rgc @*/;
+BEECRYPTAPI
+int dlpk_pgoqValidate(const dlpk_p*, randomGeneratorContext*, int cofactor);
+BEECRYPTAPI
+int dlpk_pgonValidate(const dlpk_p*, randomGeneratorContext*);
#ifdef __cplusplus
}
* \ingroup DL_m DL_dh_m
*/
-#include "system.h"
-#include "dlsvdp-dh.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/dlsvdp-dh.h"
/*!\addtogroup DL_dh_m
* \{
*/
-int dlsvdp_pDHSecret(const dldp_p* dp, const mpnumber* x, const mpnumber* y, mpnumber* s)
+/*!\fn dlsvdp_pDHSecret(const dhparam* dp, const mpnumber* x, const mpnumber* y, mpnumber* s)
+ * \brief Computes the shared secret.
+ *
+ * Equation:
+ *
+ * \li \f$s=y^{x}\ \textrm{mod}\ p\f$
+ *
+ * \param dp The domain parameters.
+ * \param x The private value.
+ * \param y The public value (of the peer).
+ * \param s The computed secret value.
+ *
+ * \retval 0 on success.
+ * \retval -1 on failure.
+ */
+int dlsvdp_pDHSecret(const dhparam* dp, const mpnumber* x, const mpnumber* y, mpnumber* s)
{
mpbnpowmod(&dp->p, y, x, s);
/*!\file dlsvdp-dh.h
* \brief Diffie-Hellman algorithm, headers.
* \author Bob Deblier <bob.deblier@pandora.be>
- * \ingroup DL_m DL_dh_m
+ * \ingroup DL_m DL_dh_m
*/
#ifndef _DLSVDP_DH_H
#define _DLSVDP_DH_H
-#include "dldp.h"
+#include "beecrypt/dldp.h"
+#include "beecrypt/dlkp.h"
#ifdef __cplusplus
extern "C" {
#endif
-/**
- * Computes the shared secret.
- *
- * Equation:
- *
- * \li \f$s=y^{x}\ \textrm{mod}\ p\f$
- *
- * @param dp domain parameters
- * @param x private value
- * @param y public value (of the peer)
- * @param s computed secret value
- * @retval 0 on success, -1 on failure.
- */
+typedef dldp_p dhparam;
+typedef dlkp_p dhkp;
+
BEECRYPTAPI
-int dlsvdp_pDHSecret(const dldp_p* dp, const mpnumber* x, const mpnumber* y, mpnumber* s)
- /*@modifies s @*/;
+int dlsvdp_pDHSecret(const dhparam*, const mpnumber*, const mpnumber*, mpnumber*);
#ifdef __cplusplus
}
+++ /dev/null
-.deps
-.depend
-.depend-done
-.libs
-Makefile
-Makefile.in
-config.cache
-config.guess
-config.log
-config.status
-config.sub
-configure
-libtool
-ltconfig
-ltmain.sh
-*.o
-*.lo
-stamp-h
-stamp-h.in
*/
/*!\file dsa.c
- * \brief Digital Signature Algorithm, as specified by NIST FIPS 186.
- *
- * FIPS 186 specifies the DSA algorithm as having a large prime \f$p\f$,
- * a cofactor \f$q\f$ and a generator \f$g\f$ of a subgroup of
- * \f$\mathds{Z}^{*}_p\f$ with order \f$q\f$. The private and public key
- * values are \f$x\f$ and \f$y\f$ respectively.
- *
- * \author Bob Deblier <bob.deblier@pandora.be>
+ * \brief Digital Signature Algorithm.
* \ingroup DL_m DL_dsa_m
- *
- * - Signing equation:
- * - r = (g^k mod p) mod q and
- * - s = (inv(k) * (h(m) + x*r)) mod q
- * - Verifying equation:
- * - check 0 < r < q and 0 < s < q
- * - w = inv(s) mod q
- * - u1 = (h(m)*w) mod q
- * - u2 = (r*w) mod q
- * - v = ((g^u1 * y^u2) mod p) mod q
- * - check v == r
*/
+
+#define BEECRYPT_DLL_EXPORT
-#include "system.h"
-#include "dsa.h"
-#include "dldp.h"
-#include "mp.h"
-#include "debug.h"
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/dsa.h"
+#include "beecrypt/dldp.h"
int dsasign(const mpbarrett* p, const mpbarrett* q, const mpnumber* g, randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s)
{
register int rc = -1;
- ptemp = (mpw*) malloc((5*psize+2) * sizeof(*ptemp));
+ ptemp = (mpw*) malloc((5*psize+2)*sizeof(mpw));
if (ptemp == (mpw*) 0)
return rc;
- qtemp = (mpw*) malloc((14*qsize+11) * sizeof(*qtemp));
+ qtemp = (mpw*) malloc((9*qsize+6)*sizeof(mpw));
if (qtemp == (mpw*) 0)
{
free(ptemp);
if (mpgex(s->size, s->data, qsize, q->modl))
return rc;
- ptemp = (mpw*) malloc((6*psize+2) * sizeof(*ptemp));
+ ptemp = (mpw*) malloc((6*psize+2)*sizeof(mpw));
if (ptemp == (mpw*) 0)
return rc;
- qtemp = (mpw*) malloc((13*qsize+11) * sizeof(*qtemp));
+ qtemp = (mpw*) malloc((8*qsize+6)*sizeof(mpw));
if (qtemp == (mpw*) 0)
{
free(ptemp);
mpsetx(qsize, qtemp+qsize, s->size, s->data);
/* compute w = inv(s) mod q */
-/*@-compdef@*/ /* FIX: mpsetx annotations, qtemp[qsize] is defined */
- if (mpextgcd_w(qsize, qtemp+qsize, q->modl, qtemp, qwksp))
-/*@=compdef@*/
+ if (mpextgcd_w(qsize, q->modl, qtemp+qsize, qtemp, qwksp))
{
-
/* compute u1 = h(m)*w mod q */
mpbmulmod_w(q, hm->size, hm->data, qsize, qtemp, qtemp+qsize, qwksp);
return rc;
}
+
+int dsaparamMake(dsaparam* dp, randomGeneratorContext* rgc, size_t psize)
+{
+ /* psize must be >= 512 and <= 1024 */
+ if ((psize < 512) || (psize > 1024))
+ return -1;
+
+ /* psize must be a multiple of 64 */
+ if ((psize & 0x3f) != 0)
+ return -1;
+
+ return dldp_pgoqMake(dp, rgc, psize, 160, 1);
+}
#ifndef _DSA_H
#define _DSA_H
-#include "mpbarrett.h"
+#include "beecrypt/dlkp.h"
+
+typedef dldp_p dsaparam;
+typedef dlpk_p dsapub;
+typedef dlkp_p dsakp;
#ifdef __cplusplus
extern "C" {
#endif
-/**
- * The raw DSA signing function.
+/*!\fn int dsasign(const mpbarrett* p, const mpbarrett* q, const mpnumber* g, randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s)
+ * \brief This function performs a raw DSA signature.
*
* Signing equations:
*
* \li \f$r=(g^{k}\ \textrm{mod}\ p)\ \textrm{mod}\ q\f$
* \li \f$s=k^{-1}(h(m)+xr)\ \textrm{mod}\ q\f$
*
- * @param p The prime.
- * @param q The cofactor.
- * @param g The generator.
- * @param rgc The pseudo-random generator context.
- * @param hm The hash to be signed.
- * @param x The private key value.
- * @param r The signature's \e r value.
- * @param s The signature's \e r value.
- * @retval 0 on success, -1 on failure.
+ * \param p The prime.
+ * \param q The cofactor.
+ * \param g The generator.
+ * \param rgc The pseudo-random generator context.
+ * \param hm The hash to be signed.
+ * \param x The private key value.
+ * \param r The signature's \e r value.
+ * \param s The signature's \e s value.
+ * \retval 0 on success.
+ * \retval -1 on failure.
*/
-BEECRYPTAPI /*@unused@*/
-int dsasign(const mpbarrett* p, const mpbarrett* q, const mpnumber* g, randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s)
- /*@modifies r->size, r->data, *r->data, s->size, s->data @*/;
+BEECRYPTAPI
+int dsasign(const mpbarrett* p, const mpbarrett* q, const mpnumber* g, randomGeneratorContext*, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s);
-/**
- * The raw DSA verification function.
+/*!\fn int dsavrfy(const mpbarrett* p, const mpbarrett* q, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s)
+ * \brief This function performs a raw DSA verification.
*
* Verifying equations:
* \li Check \f$0<r<q\f$ and \f$0<s<q\f$
* \li \f$v=(g^{u_1}y^{u_2}\ \textrm{mod}\ p)\ \textrm{mod}\ q\f$
* \li Check \f$v=r\f$
*
- * @warning The return type of this function should be a boolean, but since
- * that type isn't portable, an int is used.
+ * \param p The prime.
+ * \param q The cofactor.
+ * \param g The generator.
+ * \param hm The digest to be verified.
+ * \param y The public key value.
+ * \param r The signature's \e r value.
+ * \param s The signature's \e s value.
+ * \retval 1 on success.
+ * \retval 0 on failure.
+ */
+BEECRYPTAPI
+int dsavrfy(const mpbarrett* p, const mpbarrett* q, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s);
+
+/*!\fn int dsaparamMake(dsaparam* dp, randomGeneratorContext* rgc, size_t psize)
+ * \brief This function generates a set of DSA parameters.
+ *
+ * This function calls dldp_pgoqMake with appropriate parameters, i.e.
+ * qsize = 160 bits and cofactor = 1.
*
- * @param p The prime.
- * @param q The cofactor.
- * @param g The generator.
- * @param hm The digest to be verified.
- * @param y The public key value.
- * @param r The signature's r value.
- * @param s The signature's r value.
- * @retval 0 on failure, 1 on success.
+ * \param dp The parameters to be generated.
+ * \param rgc The random generator context.
+ * \param psize The size of prime parameter p; psize must be >= 512 and <= 1024, and be a multiple of 64.
+ * \retval 0 on success.
+ * \retval -1 on failure.
*/
-BEECRYPTAPI /*@unused@*/
-int dsavrfy(const mpbarrett* p, const mpbarrett* q, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s)
- /*@*/;
+BEECRYPTAPI
+int dsaparamMake(dsaparam*, randomGeneratorContext*, size_t);
#ifdef __cplusplus
}
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
-
+
/*!\file elgamal.c
* \brief ElGamal algorithm.
- *
- * For more information on this algorithm, see:
- * "Handbook of Applied Cryptography"
- * 11.5.2: "The ElGamal signature scheme", p. 454-459
- *
- * Two of the signature variants in Note 11.70 are described.
- *
- * \todo Explore the possibility of using simultaneous multiple exponentiation,
- * as described in HAC, 14.87 (iii).
- *
* \author Bob Deblier <bob.deblier@pandora.be>
- * \ingroup DL_m DL_elgamal_m
- *
- * - ElGamal Signature variant 1: (i.e. the standard version)
- * - Signing equation:
- * - r = g^k mod p and
- * - s = inv(k) * (h(m) - x*r) mod (p-1)
- * - Verifying equation:
- * - check 1 <= r <= (p-1)
- * - v1 = g^h(m) mod p
- * - v2 = y^r * r^s mod p
- * - check v1 == v2
- * - Simultaneous multiple exponentiation verification:
- * - y^r * r^s * g^(p-1-h(m)) mod p = 1 or (the former is probably faster)
- * - y^r * r^s * inv(g)^h(m) mod p = 1
- *
- * - ElGamal Signature variant 3: signing is simpler, because no inverse has to be calculated
- * - Signing equation:
- * - r = g^k mod p and
- * - s = x*r + k*h(m) mod (p-1)
- * - Verifying equation:
- * - check 1 <= r <= (p-1)
- * - v1 = g^s mod p
- * - v2 = y^r * r^h(m) mod p
- * - Simultaneous multiple exponentiation verification:
- * - y^r * r^h(m) * g^(p-1-s) mod p = 1 (one of the exponents is significantly smaller, i.e. h(m))
*/
-#include "system.h"
-#include "elgamal.h"
-#include "dldp.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
-/*!\addtogroup DL_elgamal_m
- * \{
- */
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/elgamal.h"
+#include "beecrypt/dldp.h"
int elgv1sign(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s)
{
register size_t size = p->size;
- register mpw* temp = (mpw*) malloc((13*size+11) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((8*size+6)*sizeof(mpw));
if (temp)
{
/* compute -(x*r) mod n */
mpneg(size, temp);
- (void) mpadd(size, temp, n->modl);
+ mpadd(size, temp, n->modl);
/* compute h(m) - x*r mod n */
mpbaddmod_w(n, hm->size, hm->data, size, temp, temp, temp+2*size);
if (mpgex(s->size, s->data, n->size, n->modl))
return 0;
- temp = (mpw*) malloc((6*size+2) * sizeof(*temp));
+ temp = (mpw*) malloc((6*size+2)*sizeof(mpw));
if (temp)
{
int elgv3sign(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s)
{
register size_t size = p->size;
- register mpw* temp = (mpw*) malloc((6*size+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((6*size+2)*sizeof(mpw));
if (temp)
{
if (mpgex(s->size, s->data, n->size, n->modl))
return 0;
- temp = (mpw*) malloc((6*size+2) * sizeof(*temp));
+ temp = (mpw*) malloc((6*size+2)*sizeof(mpw));
if (temp)
{
#ifndef _ELGAMAL_H
#define _ELGAMAL_H
-#include "mpbarrett.h"
+#include "beecrypt/mpbarrett.h"
#ifdef __cplusplus
extern "C" {
#endif
-/**
- * The raw ElGamal signing funcion, variant 1.
+/*!\fn int elgv1sign(const mpbarrett* p, const mpbarrett* n, const mpnumber* g,
+randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r,
+ mpnumber* s)
+ * \brief This function performs raw ElGamal signing, variant 1.
*
* Signing equations:
*
* \li \f$r=g^{k}\ \textrm{mod}\ p\f$
* \li \f$s=k^{-1}(h(m)-xr)\ \textrm{mod}\ (p-1)\f$
*
- * @param p The prime.
- * @param n The reducer mod (p-1).
- * @param g The generator.
- * @param rgc The pseudo-random generator.
- * @param hm The hash to be signed.
- * @param x The private key value.
- * @param r The signature's \e r value.
- * @param s The signature's \e r value.
- * @retval 0 on success, -1 on failure.
+ * \param p The prime.
+ * \param n The reducer mod (p-1).
+ * \param g The generator.
+ * \param rgc The pseudo-random generat
+ * \param hm The hash to be signed.
+ * \param x The private key value.
+ * \param r The signature's \e r value.
+ * \param s The signature's \e s value.
+ * \retval 0 on success.
+ * \retval -1 on failure.
*/
-BEECRYPTAPI /*@unused@*/
-int elgv1sign(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s)
- /*@modifies r, s */;
+BEECRYPTAPI
+int elgv1sign(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, randomGeneratorContext*, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s);
-/**
- * The raw ElGamal signing funcion, variant 3.
- *
- * Signing equations:
- *
- * \li \f$r=g^{k}\ \textrm{mod}\ p\f$
- * \li \f$s=xr+kh(m)\ \textrm{mod}\ (p-1)\f$
- *
- * @param p The prime.
- * @param n The reducer mod (p-1).
- * @param g The generator.
- * @param rgc The pseudo-random generator.
- * @param hm The hash to be signed.
- * @param x The private key value.
- * @param r The signature's \e r value.
- * @param s The signature's \e r value.
- * @retval 0 on success, -1 on failure.
- */
-BEECRYPTAPI /*@unused@*/
-int elgv3sign(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s)
- /*@modifies r, s */;
-
-/**
- * The raw ElGamal verification funcion, variant 1.
+/*!\fn int elgv1vrfy(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s)
+ * \brief This function performs raw ElGamal verification, variant 1.
*
* Verifying equations:
*
* \li \f$v_2=g^{h(m)}\ \textrm{mod}\ p\f$
* \li Check \f$v_1=v_2\f$
*
- * @warning The return type of this function should be a boolean, but since
- * that type isn't as portable, an int is used.
- *
- * @param p The prime.
- * @param n The reducer mod (p-1).
- * @param g The generator.
- * @param hm The hash to be signed.
- * @param y The public key value.
- * @param r The signature's \e r value.
- * @param s The signature's \e r value.
- * @retval 1 on success, 0 on failure.
+ * \param p The prime.
+ * \param n The reducer mod (p-1).
+ * \param g The generator.
+ * \param hm The hash to be signed.
+ * \param y The public key value.
+ * \param r The signature's \e r value.
+ * \param s The signature's \e s value.
+ * \retval 1 on success.
+ * \retval 0 on failure.
+ */
+BEECRYPTAPI
+int elgv3sign(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, randomGeneratorContext*, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s);
+
+/*!\fn int elgv3sign(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, randomGeneratorContext* rgc, const mpnumber* hm, const mpnumber* x, mpnumber* r, mpnumber* s)
+ * \brief This function performs raw ElGamal signing, variant 3.
+ *
+ * Signing equations:
+ *
+ * \li \f$r=g^{k}\ \textrm{mod}\ p\f$
+ * \li \f$s=xr+kh(m)\ \textrm{mod}\ (p-1)\f$
+ *
+ * \param p The prime.
+ * \param n The reducer mod (p-1).
+ * \param g The generator.
+ * \param rgc The pseudo-random generat
+ * \param hm The hash to be signed.
+ * \param x The private key value.
+ * \param r The signature's \e r value.
+ * \param s The signature's \e s value.
+ * \retval 0 on success.
+ * \retval -1 on failure.
*/
-BEECRYPTAPI /*@unused@*/
-int elgv1vrfy(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s)
- /*@*/;
+BEECRYPTAPI
+int elgv1vrfy(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s);
-/**
- * The raw ElGamal verification funcion, variant 3.
+/*!\fn int elgv3vrfy(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s)
+ * \brief This function performs raw ElGamal verification, variant 3.
*
* Verifying equations:
*
* \li \f$v_2=y^{r}r^{h(m)}\ \textrm{mod}\ p\f$
* \li Check \f$v_1=v_2\f$
*
- * @warning The return type of this function should be a boolean, but since
- * that type isn't as portable, an int is used.
- *
- * @param p The prime.
- * @param n The reducer mod (p-1).
- * @param g The generator.
- * @param hm The hash to be signed.
- * @param y The public key value.
- * @param r The signature's \e r value.
- * @param s The signature's \e r value.
- * @retval 1 on success, 0 on failure.
+ * \param p The prime.
+ * \param n The reducer mod (p-1).
+ * \param g The generator.
+ * \param hm The hash to be signed.
+ * \param y The public key value.
+ * \param r The signature's \e r value.
+ * \param s The signature's \e s value.
+ * \retval 1 on success.
+ * \retval 0 on failure.
*/
-BEECRYPTAPI /*@unused@*/
-int elgv3vrfy(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s)
- /*@*/;
+BEECRYPTAPI
+int elgv3vrfy(const mpbarrett* p, const mpbarrett* n, const mpnumber* g, const mpnumber* hm, const mpnumber* y, const mpnumber* r, const mpnumber* s);
#ifdef __cplusplus
}
-/*@-bitwisesigned -shiftimplementation @*/
/*
* Copyright (c) 1998, 1999, 2000, 2001 Virtual Unlimited B.V.
*
* \author Bob Deblier <bob.deblier@pandora.be>
*/
-#include "system.h"
-#include "endianness.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/endianness.h"
int16_t swap16(int16_t n)
{
int64_t swap64(int64_t n)
{
- return ( ((n & ((int64_t) 0xff) ) << 56) |
- ((n & ((int64_t) 0xff) << 8) << 40) |
- ((n & ((int64_t) 0xff) << 16) << 24) |
- ((n & ((int64_t) 0xff) << 24) << 8) |
- ((n & ((int64_t) 0xff) << 32) >> 8) |
- ((n & ((int64_t) 0xff) << 40) >> 24) |
- ((n & ((int64_t) 0xff) << 48) >> 40) |
- ((n & ((int64_t) 0xff) << 56) >> 56) );
+ return ( ((n & (((int64_t) 0xff) )) << 56) |
+ ((n & (((int64_t) 0xff) << 8)) << 40) |
+ ((n & (((int64_t) 0xff) << 16)) << 24) |
+ ((n & (((int64_t) 0xff) << 24)) << 8) |
+ ((n & (((int64_t) 0xff) << 32)) >> 8) |
+ ((n & (((int64_t) 0xff) << 40)) >> 24) |
+ ((n & (((int64_t) 0xff) << 48)) >> 40) |
+ ((n & (((int64_t) 0xff) << 56)) >> 56) );
}
-/*@=bitwisesigned =shiftimplementation @*/
*
* Copyright (c) 1998, 1999, 2000, 2001 Virtual Unlimited B.V.
*
+ * Author: Bob Deblier <bob@virtualunlimited.com>
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
#ifndef _ENDIANNESS_H
#define _ENDIANNESS_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
#ifdef __cplusplus
inline int16_t swap16(int16_t n)
((n & ((int64_t) 0xff) << 56) >> 56) );
}
#else
-/*@-exportlocal@*/
-/**
- */
-/*@unused@*/
- int16_t swap16 (int16_t n)
- /*@*/;
-
-/**
- */
-uint16_t swapu16(uint16_t n)
- /*@*/;
-
-/**
- */
-/*@unused@*/
- int32_t swap32 (int32_t n)
- /*@*/;
+ int16_t swap16 (int16_t);
+uint16_t swapu16(uint16_t);
+ int32_t swap32 (int32_t);
+uint32_t swapu32(uint32_t);
+ int64_t swap64 (int64_t);
+#endif
-/**
- */
-uint32_t swapu32(uint32_t n)
- /*@*/;
+#ifdef __cplusplus
+extern "C" {
+#endif
-/**
- */
-/*@unused@*/
- int64_t swap64 (int64_t n)
- /*@*/;
-/*@=exportlocal@*/
+#ifdef __cplusplus
+}
#endif
#endif
#define BEECRYPT_DLL_EXPORT
-#include "system.h"
-#include "entropy.h"
-#include "endianness.h"
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/entropy.h"
+#include "beecrypt/endianness.h"
#if WIN32
# include <mmsystem.h>
# if HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
# endif
+# if HAVE_SYS_STAT_H
+# include <sys/types.h>
+# include <sys/stat.h>
+# endif
+# if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+# else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# elif HAVE_TIME_H
+# include <time.h>
+# endif
+# endif
# if HAVE_SYS_AUDIOIO_H
-# include <sys/audioio.h>
+# include <sys/audioio.h>
# endif
# if HAVE_SYS_SOUNDCARD_H
# include <sys/soundcard.h>
# elif HAVE_TERMIO_H
# include <termio.h>
# endif
-# if HAVE_SYNCH_H
-# include <synch.h>
-# elif HAVE_PTHREAD_H
-# include <pthread.h>
+# ifdef _REENTRANT
+# if HAVE_THREAD_H && HAVE_SYNCH_H
+# include <synch.h>
+# elif HAVE_PTHREAD_H
+# include <pthread.h>
+# endif
# endif
# if HAVE_AIO_H
# include <aio.h>
-# if defined(__LCLINT__)
-/*@-declundef -exportheader -incondefs -constuse -warnmissingglobs @*/
- extern int /*@unused@*/
-nanosleep (const struct timespec *__requested_time,
- /*@out@*/ /*@null@*/ struct timespec *__remaining)
- /*@modifies *__remaining, errno @*/;
-
- extern void
-aio_init (const struct aioinit *__init)
- /*@*/;
- extern int
-aio_read (struct aiocb *__aiocbp)
- /*@modifies errno, fileSystem, systemState @*/;
- extern int
-aio_write (struct aiocb *__aiocbp)
- /*@modifies errno, fileSystem, systemState @*/;
- extern int
-lio_listio (int __mode,
- struct aiocb *const __list[],
- int __nent, struct sigevent *__sig)
- /*@modifies errno, fileSystem, systemState @*/;
- extern int
-aio_error (const struct aiocb *__aiocbp)
- /*@modifies errno @*/;
- extern __ssize_t
-aio_return (struct aiocb *__aiocbp)
- /*@modifies errno, systemState @*/;
- extern int
-aio_cancel (int __fildes, /*@null@*/ struct aiocb *__aiocbp)
- /*@modifies errno, systemState @*/;
- extern int
-aio_suspend (/*@out@*/ const struct aiocb *const __list[], int __nent,
- /*@out@*/ const struct timespec *__timeout)
- /*@modifies errno, systemState @*/;
- extern int
-aio_fsync (int __operation, struct aiocb *__aiocbp)
- /*@modifies errno, fileSystem, systemState @*/;
-
-/*@constant int AIO_CANCELED@*/
-/*@constant int AIO_NOTCANCELED@*/
-/*@constant int AIO_ALLDONE@*/
-/*@constant int LIO_READ@*/
-/*@constant int LIO_WRITE@*/
-/*@constant int LIO_NOP@*/
-/*@constant int LIO_WAIT@*/
-/*@constant int LIO_NOWAIT@*/
-/*@constant int SIGEV_SIGNAL@*/
-/*@constant int SIGEV_NONE@*/
-/*@constant int SIGEV_THREAD@*/
-
-/*@=declundef =exportheader =incondefs =constuse =warnmissingglobs @*/
-# endif
# endif
#endif
-
-#include "debug.h"
+#if HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+#if HAVE_ERRNO_H
+# include <errno.h>
+#endif
#if WIN32
static HINSTANCE entropy_instance = (HINSTANCE) 0;
#endif
#if WIN32 || HAVE_DEV_AUDIO || HAVE_DEV_DSP
-/** \ingroup ES_audio_m ES_dsp_m
+/*
* Mask the low-order bit of a bunch of sound samples, analyze them and
* return an error in case they are all zeroes or ones.
*/
-static int entropy_noise_filter(void* sampledata, unsigned samplecount, int samplesize, int channels, int swap)
- /*@globals errno @*/
- /*@modifies sampledata, errno @*/
+static int entropy_noise_filter(void* sampledata, int samplecount, int samplesize, int channels, int swap)
{
- register int rc = 0;
- register unsigned i;
+ register int rc = 0, i;
switch (samplesize)
{
for (i = 0; i < samplecount; i++)
{
- if ((samples[i] & 0x1) != 0)
+ if (samples[i] &= 0x1)
ones_count++;
else
zero_count++;
rc = -1;
}
}
- /*@innerbreak@*/ break;
+ break;
case 2:
{
for (i = 0; i < samplecount; i++)
{
- if (i & 1U)
+ if (i & 1)
{
- if ((samples[i] & 0x1) != 0)
+ if (samples[i] &= 0x1)
ones_count_left++;
else
zero_count_left++;
}
else
{
- if ((samples[i] & 0x1) != 0)
+ if (samples[i] &= 0x1)
ones_count_right++;
else
zero_count_right++;
rc = -1;
}
}
- /*@innerbreak@*/ break;
+ break;
default:
#if HAVE_ERRNO_H
if (swap)
samples[i] = swapu16(samples[i]);
- if ((samples[i] & 0x1) != 0)
+ if (samples[i] &= 0x1)
ones_count++;
else
zero_count++;
rc = -1;
}
}
- /*@innerbreak@*/ break;
+ break;
case 2:
{
if (i & 1)
{
- if ((samples[i] & 0x1) != 0)
+ if (samples[i] &= 0x1)
ones_count_left++;
else
zero_count_left++;
}
else
{
- if ((samples[i] & 0x1) != 0)
+ if (samples[i] &= 0x1)
ones_count_right++;
else
zero_count_right++;
rc = -1;
}
}
- /*@innerbreak@*/ break;
+ break;
default:
#if HAVE_ERRNO_H
errno = EINVAL;
#endif
rc = -1;
- /*@innerbreak@*/ break;
}
}
break;
errno = EINVAL;
#endif
rc = -1;
- break;
}
return 0;
}
-/**
- * Bit deskewing technique: the classical Von Neumann method.
- * - only use the lsb bit of every sample
- * - there is a chance of bias in 0 or 1 bits, so to deskew this:
- * - look at two successive sampled bits
- * - if they are the same, discard them
- * - if they are different, they're either 0-1 or 1-0; use the first bit of the pair as output
- */
+/* bit deskewing technique: the classical Von Neumann method
+ - only use the lsb bit of every sample
+ - there is a chance of bias in 0 or 1 bits, so to deskew this:
+ - look at two successive sampled bits
+ - if they are the same, discard them
+ - if they are different, they're either 0-1 or 1-0; use the first bit of the pair as output
+*/
#if WIN32
static int entropy_noise_gather(HWAVEIN wavein, int samplesize, int channels, int swap, int timeout, byte* data, size_t size)
#else
-/*@-mustmod@*/ /* data is modified, annotations incorrect */
-static int entropy_noise_gather(int fd, int samplesize, int channels, int swap, /*@unused@*/ int timeout, /*@out@*/ byte* data, size_t size)
- /*@globals errno, fileSystem @*/
- /*@modifies *data, errno, fileSystem @*/
+static int entropy_noise_gather(int fd, int samplesize, int channels, int swap, int timeout, byte* data, size_t size)
#endif
{
size_t randombits = size << 3;
# error
# endif
- /*@-nullderef@*/
- *sampledata = 0;
- /*@=nullderef@*/
memset(&my_aiocb, 0, sizeof(struct aiocb));
- memset(&my_aiocb_timeout, 0, sizeof(struct timespec));
my_aiocb.aio_fildes = fd;
my_aiocb.aio_sigevent.sigev_notify = SIGEV_NONE;
return -1;
}
- /*@-infloops -infloopsuncon -branchstate @*/
while (randombits)
{
#if WIN32
}
#else
# if ENABLE_AIO
- /*@-mustfree@*/ /* my_aiocb.aio_buf is OK */
my_aiocb.aio_buf = sampledata;
- /*@=mustfree@*/
my_aiocb.aio_nbytes = 1024 * samplesize * channels;
rc = aio_read(&my_aiocb);
if (rc < 0)
{
- /*@-kepttrans@*/
free(sampledata);
- /*@=kepttrans@*/
return -1;
}
if (errno == EAGAIN)
{
/* certain linux glibc versions are buggy and don't aio_suspend properly */
- (void) nanosleep(&my_aiocb_timeout, (struct timespec*) 0);
+ nanosleep(&my_aiocb_timeout, (struct timespec*) 0);
my_aiocb_timeout.tv_sec = (timeout / 1000);
my_aiocb_timeout.tv_nsec = (timeout % 1000) * 1000000;
my_aiocb_timeout.tv_sec = (timeout / 1000);
my_aiocb_timeout.tv_nsec = (timeout % 1000) * 1000000;
- (void) nanosleep(&my_aiocb_timeout, (struct timespec*) 0);
+ nanosleep(&my_aiocb_timeout, (struct timespec*) 0);
}
if (rc < 0)
- /*@innerbreak@*/ break;
+ break;
}
- /*@-kepttrans@*/
free(sampledata);
- /*@=kepttrans@*/
return -1;
}
if (rc)
{
- /*@-kepttrans@*/
free(sampledata);
- /*@=kepttrans@*/
return -1;
}
if (rc < 0)
{
- /*@-kepttrans@*/
free(sampledata);
- /*@=kepttrans@*/
return -1;
}
# endif
#endif
-/*@-type@*/
if (entropy_noise_filter(sampledata, rc / samplesize, samplesize, channels, swap) < 0)
-/*@=type@*/
{
fprintf(stderr, "noise filter indicates too much bias in audio samples\n");
- /*@-kepttrans@*/
free(sampledata);
- /*@=kepttrans@*/
return -1;
}
for (i = 0; randombits && (i < 1024); i += 2)
{
- if ((samples[i] ^ samples[i+1]) != 0)
+ if (samples[i] ^ samples[i+1])
{
temp <<= 1;
temp |= samples[i];
}
}
}
- /*@switchbreak@*/ break;
+ break;
case 2:
{
}
}
}
- /*@switchbreak@*/ break;
+ break;
default:
- /*@-kepttrans@*/
free(sampledata);
- /*@=kepttrans@*/
return -1;
- /*@notreached@*/ /*@switchbreak@*/ break;
}
}
- /*@=infloops =infloopsuncon =branchstate @*/
#if WIN32
waveInStop(wavein);
waveInReset(wavein);
#endif
- /*@-usereleased -kepttrans@*/
free(sampledata);
- /*@=usereleased =kepttrans@*/
return 0;
}
-/*@=mustmod@*/
#endif
#if WIN32
rc = waveInOpen(&wavein, WAVE_MAPPER, &waveformatex, (DWORD) entropy_wavein_event, (DWORD) 0, CALLBACK_EVENT);
if (rc != MMSYSERR_NOERROR)
{
- fprintf(stderr, "waveInOpen failed!\n"); (void) fflush(stderr);
+ fprintf(stderr, "waveInOpen failed!\n"); fflush(stderr);
ReleaseMutex(entropy_wavein_lock);
return -1;
}
return -1;
}
- printf("please press random keys on your keyboard\n"); (void) fflush(stdout);
+ printf("please press random keys on your keyboard\n"); fflush(stdout);
while (randombits)
{
if (!ReadConsoleInput(hStdin, &inEvent, 1, &inRet))
{
- fprintf(stderr, "ReadConsoleInput failed\n"); (void) fflush(stderr);
+ fprintf(stderr, "ReadConsoleInput failed\n"); fflush(stderr);
return -1;
}
if ((inRet == 1) && (inEvent.EventType == KEY_EVENT) && inEvent.Event.KeyEvent.bKeyDown)
{
- printf("."); (void) fflush(stdout);
+ printf("."); fflush(stdout);
if (!QueryPerformanceCounter(&hrtsample))
{
- fprintf(stderr, "QueryPerformanceCounter failed\n"); (void) fflush(stderr);
+ fprintf(stderr, "QueryPerformanceCounter failed\n"); fflush(stderr);
return -1;
}
if (!FlushConsoleInputBuffer(hStdin))
{
- fprintf(stderr, "FlushConsoleInputBuffer failed\n"); (void) fflush(stderr);
+ fprintf(stderr, "FlushConsoleInputBuffer failed\n"); fflush(stderr);
return -1;
}
#else
#if HAVE_DEV_AUDIO
-/** \ingroup ES_audio_m
+/*!\addtogroup ES_audio_m
+ * \{
*/
-/*@observer@*/ /*@unchecked@*/
static const char* name_dev_audio = "/dev/audio";
-
-/** \ingroup ES_audio_m
- */
-/*@unchecked@*/
static int dev_audio_fd = -1;
-
-/** \ingroup ES_audio_m
- */
# ifdef _REENTRANT
-# if HAVE_SYNCH_H
-/*@unchecked@*/
+# if HAVE_THREAD_H && HAVE_SYNCH_H
static mutex_t dev_audio_lock = DEFAULTMUTEX;
# elif HAVE_PTHREAD_H
-/*@unchecked@*/
static pthread_mutex_t dev_audio_lock = PTHREAD_MUTEX_INITIALIZER;
# else
# error Need locking mechanism
# endif
# endif
+/*!\}
+ */
#endif
#if HAVE_DEV_DSP
-/** \ingroup ES_dsp_m
+/*!\addtogroup ES_dsp_m
+ * \{
*/
-/*@observer@*/ /*@unchecked@*/
static const char* name_dev_dsp = "/dev/dsp";
-
-/** \ingroup ES_dsp_m
- */
-/*@unchecked@*/
static int dev_dsp_fd = -1;
-
-/** \ingroup ES_dsp_m
- */
# ifdef _REENTRANT
-# if HAVE_SYNCH_H
-/*@unchecked@*/
+# if HAVE_THREAD_H && HAVE_SYNCH_H
static mutex_t dev_dsp_lock = DEFAULTMUTEX;
# elif HAVE_PTHREAD_H
-/*@-type@*/
-/*@unchecked@*/
static pthread_mutex_t dev_dsp_lock = PTHREAD_MUTEX_INITIALIZER;
-/*@=type@*/
# else
# error Need locking mechanism
# endif
# endif
+/*!\}
+ */
#endif
#if HAVE_DEV_RANDOM
-/** \ingroup ES_random_m
+/*!\addtogroup ES_random_m
+ * \{
*/
-/*@observer@*/ /*@unchecked@*/
static const char* name_dev_random = "/dev/random";
-
-/** \ingroup ES_random_m
- */
-/*@unchecked@*/
static int dev_random_fd = -1;
-
-/** \ingroup ES_random_m
- */
# ifdef _REENTRANT
-# if HAVE_SYNCH_H
-/*@unchecked@*/
+# if HAVE_THREAD_H && HAVE_SYNCH_H
static mutex_t dev_random_lock = DEFAULTMUTEX;
# elif HAVE_PTHREAD_H
-/*@-type@*/
-/*@unchecked@*/
static pthread_mutex_t dev_random_lock = PTHREAD_MUTEX_INITIALIZER;
-/*@=type@*/
# else
# error Need locking mechanism
# endif
# endif
+/*!\}
+ */
#endif
#if HAVE_DEV_URANDOM
-/** \ingroup ES_urandom_m
+/*!\addtogroup ES_urandom_m
+ * \{
*/
-/*@observer@*/ /*@unchecked@*/
static const char* name_dev_urandom = "/dev/urandom";
-
-/** \ingroup ES_urandom_m
- */
-/*@unchecked@*/
static int dev_urandom_fd = -1;
-
-/** \ingroup ES_urandom_m
- */
# ifdef _REENTRANT
-# if HAVE_SYNCH_H
-/*@unchecked@*/
+# if HAVE_THREAD_H && HAVE_SYNCH_H
static mutex_t dev_urandom_lock = DEFAULTMUTEX;
# elif HAVE_PTHREAD_H
-/*@-type@*/
-/*@unchecked@*/
static pthread_mutex_t dev_urandom_lock = PTHREAD_MUTEX_INITIALIZER;
-/*@=type@*/
# else
# error Need locking mechanism
# endif
# endif
+/*!\}
+ */
#endif
#if HAVE_DEV_TTY
-/** \ingroup ES_tty_m
+/*!\addtogroup ES_tty_m
+ * \{
*/
-/*@observer@*/ /*@unchecked@*/
static const char *dev_tty_name = "/dev/tty";
-
-/** \ingroup ES_tty_m
- */
-/*@unchecked@*/
static int dev_tty_fd = -1;
-
-/** \ingroup ES_tty_m
- * @todo hpux needs real locking mechanism.
- */
-# if defined(_REENTRANT) && !defined(hpux)
-# if HAVE_SYNCH_H
-/*@unchecked@*/
+# ifdef _REENTRANT
+# if HAVE_THREAD_H && HAVE_SYNCH_H
static mutex_t dev_tty_lock = DEFAULTMUTEX;
# elif HAVE_PTHREAD_H
-/*@-type@*/
-/*@unchecked@*/
static pthread_mutex_t dev_tty_lock = PTHREAD_MUTEX_INITIALIZER;
-/*@=type@*/
# else
# error Need locking mechanism
# endif
# endif
+/*!\}
+ */
#endif
#if HAVE_SYS_STAT_H
-/**
- * @param device
- * @return
- */
static int statdevice(const char *device)
- /*@globals fileSystem @*/
- /*@modifies fileSystem @*/
{
struct stat s;
}
#endif
-/**
- * @param device
- * @return
- */
static int opendevice(const char *device)
- /*@globals fileSystem @*/
- /*@modifies fileSystem @*/
{
register int fd;
}
#if HAVE_DEV_RANDOM || HAVE_DEV_URANDOM
-/** \ingroup ES_random_m ES_urandom_m
- * @param fd
- * @param timeout in milliseconds
- * @retval data
- * @param size
- * @return
+/* timeout is in milliseconds */
+/*!\ingroup ES_random_m ES_urandom_m
*/
-static int entropy_randombits(int fd, /*@unused@*/ int timeout, /*@out@*/ byte* data, size_t size)
- /*@modifies *data @*/
+static int entropy_randombits(int fd, int timeout, byte* data, size_t size)
{
register int rc;
# endif
memset(&my_aiocb, 0, sizeof(struct aiocb));
- memset(&my_aiocb_timeout, 0, sizeof(struct timespec));
my_aiocb.aio_fildes = fd;
my_aiocb.aio_sigevent.sigev_notify = SIGEV_NONE;
#endif
- /*@-branchstate@*/
while (size)
{
#if ENABLE_AIO
- /*@-mustfree@*/ /* my_aiocb.aio_buf is OK */
my_aiocb.aio_buf = data;
- /*@=mustfree@*/
my_aiocb.aio_nbytes = size;
rc = aio_read(&my_aiocb);
if (errno == EAGAIN)
{
/* certain linux glibc versions are buggy and don't aio_suspend properly */
- (void) nanosleep(&my_aiocb_timeout, (struct timespec*) 0);
+ nanosleep(&my_aiocb_timeout, (struct timespec*) 0);
my_aiocb_timeout.tv_sec = 0;
my_aiocb_timeout.tv_nsec = 0;
my_aiocb_timeout.tv_sec = (timeout / 1000);
my_aiocb_timeout.tv_nsec = (timeout % 1000) * 1000000;
- (void) nanosleep(&my_aiocb_timeout, (struct timespec*) 0);
+ nanosleep(&my_aiocb_timeout, (struct timespec*) 0);
}
if (rc < 0)
- /*@innerbreak@*/ break;
+ break;
}
return -1;
data += rc;
size -= rc;
}
- /*@=branchstate@*/
return 0;
}
#endif
#if HAVE_DEV_TTY
-/** \ingroup ES_tty_m
- * @param fd
- * @retval data
- * @param size
- * @return
+/*!\ingroup ES_tty_m
*/
-static int entropy_ttybits(int fd, /*@out@*/ byte* data, size_t size)
- /*@globals fileSystem @*/
- /*@modifies fileSystem @*/
+static int entropy_ttybits(int fd, byte* data, size_t size)
{
byte dummy;
}
tio_set = tio_save;
- /*@-noeffect -type @*/ /* LCL: dunno @*/
tio_set.c_cc[VMIN] = 1; /* read 1 tty character at a time */
tio_set.c_cc[VTIME] = 0; /* don't timeout the read */
- /*@=noeffect =type @*/
-/*@-bitwisesigned@*/
tio_set.c_iflag |= IGNBRK; /* ignore <ctrl>-c */
tio_set.c_lflag &= ~(ECHO|ICANON); /* don't echo characters */
-/*@=bitwisesigned@*/
/* change the tty settings, and flush input characters */
if (tcsetattr(fd, TCSAFLUSH, &tio_set) < 0)
#endif
return -1;
}
- printf("."); (void) fflush(stdout);
+ printf("."); fflush(stdout);
#if HAVE_GETHRTIME
hrtsample = gethrtime();
/* discard the 10 lowest bits i.e. 1024 nanoseconds of a sample */
- temp |= (uint16_t)(hrtsample >> 10);
*(data++) = (byte)(hrtsample >> 10);
size--;
#elif HAVE_GETTIMEOFDAY
/* discard the 4 lowest bits i.e. 4 microseconds */
- (void) gettimeofday(&tvsample, 0);
+ gettimeofday(&tvsample, 0);
/* get 8 bits from the sample */
- *(data++) = (byte)(((unsigned)tvsample.tv_usec) >> 2);
+ *(data) = (byte)(tvsample.tv_usec >> 2);
size--;
#else
# error Need alternative high-precision timer sample
printf("\a\nthanks\n");
/* give the user 1 second to stop typing */
- (void) sleep(1U);
+ sleep(1);
#if HAVE_TERMIOS_H
/* change the tty settings, and flush input characters */
#endif
#if HAVE_DEV_AUDIO
-int entropy_dev_audio(uint32 *data, int size)
+/*!\ingroup ES_audio_m
+ */
+int entropy_dev_audio(byte* data, size_t size)
{
const char* timeout_env = getenv("BEECRYPT_ENTROPY_AUDIO_TIMEOUT");
register int rc;
#ifdef _REENTRANT
- # if HAVE_SYNCH_H
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
if (mutex_lock(&dev_audio_lock))
return -1;
# elif HAVE_PTHREAD_H
#if HAVE_ERRNO_H
perror("ioctl AUDIO_SETINFO failed");
#endif
- (void) close(dev_audio_fd);
+ close(dev_audio_fd);
goto dev_audio_end;
}
#if HAVE_ERRNO_H
perror("ioctl AUDIO_SETINFO failed");
#endif
- (void) close(dev_audio_fd);
+ close(dev_audio_fd);
goto dev_audio_end;
}
# error Unknown type of /dev/audio interface
#endif
- (void) close(dev_audio_fd);
+ close(dev_audio_fd);
dev_audio_end:
#ifdef _REENTRANT
- # if HAVE_SYNCH_H
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
mutex_unlock(&dev_audio_lock);
# elif HAVE_PTHREAD_H
pthread_mutex_unlock(&dev_audio_lock);
#endif
#if HAVE_DEV_DSP
-int entropy_dev_dsp(byte *data, size_t size)
- /*@globals dev_dsp_fd @*/
- /*@modifies dev_dsp_fd @*/
+/*!\ingroup ES_dsp_m
+ */
+int entropy_dev_dsp(byte* data, size_t size)
{
const char* timeout_env = getenv("BEECRYPT_ENTROPY_DSP_TIMEOUT");
register int rc;
#ifdef _REENTRANT
- # if HAVE_SYNCH_H
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
if (mutex_lock(&dev_dsp_lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon -noeffectuncon @*/ /* FIX: annotate */
if (pthread_mutex_lock(&dev_dsp_lock))
return -1;
- /*@=moduncon =noeffectuncon @*/
# endif
#endif
{
int mask, format, samplesize, stereo, speed, swap;
- mask = 0;
- /*@-bitwisesigned -shiftimplementation -sizeoftype -type @*/
if ((rc = ioctl(dev_dsp_fd, SNDCTL_DSP_GETFMTS, &mask)) < 0)
- /*@=bitwisesigned =shiftimplementation =sizeoftype =type @*/
{
#if HAVE_ERRNO_H
perror("ioctl SNDCTL_DSP_GETFMTS failed");
#endif
- (void) close (dev_dsp_fd);
+ close (dev_dsp_fd);
goto dev_dsp_end;
}
-/*@-bitwisesigned@*/
#if WORDS_BIGENDIAN
if (mask & AFMT_S16_BE)
{
/* No linear audio format available */
rc = -1;
- (void) close(dev_dsp_fd);
+ close(dev_dsp_fd);
goto dev_dsp_end;
}
-/*@=bitwisesigned@*/
- /*@-bitwisesigned -shiftimplementation -sizeoftype -type @*/
if ((rc = ioctl(dev_dsp_fd, SNDCTL_DSP_SETFMT, &format)) < 0)
- /*@=bitwisesigned =shiftimplementation =sizeoftype =type @*/
{
#if HAVE_ERRNO_H
perror("ioctl SNDCTL_DSP_SETFMT failed");
#endif
- (void) close(dev_dsp_fd);
+ close(dev_dsp_fd);
goto dev_dsp_end;
}
/* the next two commands are not critical */
stereo = 1;
- /*@-bitwisesigned -shiftimplementation -sizeoftype -type @*/
- (void) ioctl(dev_dsp_fd, SNDCTL_DSP_STEREO, &stereo);
- /*@=bitwisesigned =shiftimplementation =sizeoftype =type @*/
+ ioctl(dev_dsp_fd, SNDCTL_DSP_STEREO, &stereo);
speed = 44100;
- /*@-bitwisesigned -shiftimplementation -sizeoftype -type @*/
- (void) ioctl(dev_dsp_fd, SNDCTL_DSP_SPEED, &speed);
- /*@=bitwisesigned =shiftimplementation =sizeoftype =type @*/
+ ioctl(dev_dsp_fd, SNDCTL_DSP_SPEED, &speed);
rc = entropy_noise_gather(dev_dsp_fd, samplesize, 2, swap, timeout_env ? atoi(timeout_env) : 1000, data, size);
}
# error Unknown type of /dev/dsp interface
#endif
- (void) close(dev_dsp_fd);
+ close(dev_dsp_fd);
dev_dsp_end:
#ifdef _REENTRANT
- # if HAVE_SYNCH_H
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
mutex_unlock(&dev_dsp_lock);
# elif HAVE_PTHREAD_H
- /*@-moduncon -noeffectuncon @*/ /* FIX: annotate */
- (void) pthread_mutex_unlock(&dev_dsp_lock);
- /*@=moduncon =noeffectuncon @*/
+ pthread_mutex_unlock(&dev_dsp_lock);
# endif
#endif
#endif
#if HAVE_DEV_RANDOM
+/*!\ingroup ES_random_m
+ */
int entropy_dev_random(byte* data, size_t size)
- /*@globals dev_random_fd @*/
- /*@modifies dev_random_fd @*/
{
const char* timeout_env = getenv("BEECRYPT_ENTROPY_RANDOM_TIMEOUT");
int rc;
#ifdef _REENTRANT
- # if HAVE_SYNCH_H
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
if (mutex_lock(&dev_random_lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon -noeffectuncon @*/ /* FIX: annotate */
if (pthread_mutex_lock(&dev_random_lock))
return -1;
- /*@=moduncon =noeffectuncon @*/
# endif
#endif
/* collect entropy, with timeout */
rc = entropy_randombits(dev_random_fd, timeout_env ? atoi(timeout_env) : 1000, data, size);
- (void) close(dev_random_fd);
+ close(dev_random_fd);
dev_random_end:
#ifdef _REENTRANT
- # if HAVE_SYNCH_H
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
mutex_unlock(&dev_random_lock);
# elif HAVE_PTHREAD_H
- /*@-moduncon -noeffectuncon @*/ /* FIX: annotate */
- (void) pthread_mutex_unlock(&dev_random_lock);
- /*@=moduncon =noeffectuncon @*/
+ pthread_mutex_unlock(&dev_random_lock);
# endif
#endif
return rc;
#endif
#if HAVE_DEV_URANDOM
+/*!\ingroup ES_urandom_m
+ */
int entropy_dev_urandom(byte* data, size_t size)
- /*@globals dev_urandom_fd @*/
- /*@modifies dev_urandom_fd @*/
{
const char* timeout_env = getenv("BEECRYPT_ENTROPY_URANDOM_TIMEOUT");
register int rc;
#ifdef _REENTRANT
- # if HAVE_SYNCH_H
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
if (mutex_lock(&dev_urandom_lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon -noeffectuncon @*/ /* FIX: annotate */
if (pthread_mutex_lock(&dev_urandom_lock))
return -1;
- /*@=moduncon =noeffectuncon @*/
# endif
#endif
/* collect entropy, with timeout */
rc = entropy_randombits(dev_urandom_fd, timeout_env ? atoi(timeout_env) : 1000, data, size);
- (void) close(dev_urandom_fd);
+ close(dev_urandom_fd);
dev_urandom_end:
#ifdef _REENTRANT
- # if HAVE_SYNCH_H
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
mutex_unlock(&dev_urandom_lock);
# elif HAVE_PTHREAD_H
- /*@-moduncon -noeffectuncon @*/ /* FIX: annotate */
- (void) pthread_mutex_unlock(&dev_urandom_lock);
- /*@=moduncon =noeffectuncon @*/
+ pthread_mutex_unlock(&dev_urandom_lock);
# endif
#endif
return rc;
#endif
#if HAVE_DEV_TTY
+/*!\ingroup ES_tty_m
+ */
int entropy_dev_tty(byte* data, size_t size)
- /*@globals dev_tty_fd @*/
- /*@modifies dev_tty_fd @*/
{
register int rc;
-/** @todo hpux needs real locking mechanism. */
- #if defined(_REENTRANT) && !defined(hpux)
- # if HAVE_SYNCH_H
+ #ifdef _REENTRANT
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
if (mutex_lock(&dev_tty_lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon -noeffectuncon @*/ /* FIX: annotate */
if (pthread_mutex_lock(&dev_tty_lock))
return -1;
- /*@=moduncon =noeffectuncon @*/
# endif
#endif
rc = entropy_ttybits(dev_tty_fd, data, size);
- (void) close(dev_tty_fd);
+ close(dev_tty_fd);
dev_tty_end:
-/** @todo hpux needs real locking mechanism. */
- #if defined(_REENTRANT) && !defined(hpux)
- # if HAVE_SYNCH_H
+ #ifdef _REENTRANT
+ # if HAVE_THREAD_H && HAVE_SYNCH_H
mutex_unlock(&dev_tty_lock);
# elif HAVE_PTHREAD_H
- /*@-moduncon -noeffectuncon @*/ /* FIX: annotate */
- (void) pthread_mutex_unlock(&dev_tty_lock);
- /*@=moduncon =noeffectuncon @*/
+ pthread_mutex_unlock(&dev_tty_lock);
# endif
#endif
#ifndef _ENTROPY_H
#define _ENTROPY_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
#if WIN32
#include <Windows.h>
BEECRYPTAPI
int entropy_provider_setup(HINSTANCE);
BEECRYPTAPI
-int entropy_provider_cleanup(void);
+int entropy_provider_cleanup();
BEECRYPTAPI
-int entropy_wavein(byte* data, size_t size);
+int entropy_wavein(byte*, size_t);
BEECRYPTAPI
-int entropy_console(byte* data, size_t size);
+int entropy_console(byte*, size_t);
BEECRYPTAPI
-int entropy_wincrypt(byte* data, size_t size);
+int entropy_wincrypt(byte*, size_t);
#else
-
#if HAVE_DEV_AUDIO
-/** \ingroup ES_audio_m ES_m
- */
-int entropy_dev_audio (/*@out@*/ byte* data, size_t size)
- /*@globals fileSystem, internalState @*/
- /*@modifies data, fileSystem, internalState @*/;
+int entropy_dev_audio (byte*, size_t);
#endif
-
#if HAVE_DEV_DSP
-/** \ingroup ES_dsp_m ES_m
- */
-int entropy_dev_dsp (/*@out@*/ byte* data, size_t size)
- /*@globals fileSystem, internalState @*/
- /*@modifies data, fileSystem, internalState @*/;
+int entropy_dev_dsp (byte*, size_t);
#endif
-
#if HAVE_DEV_RANDOM
-/** \ingroup ES_random_m ES_m
- */
-int entropy_dev_random(/*@out@*/ byte* data, size_t size)
- /*@globals fileSystem, internalState @*/
- /*@modifies data, fileSystem, internalState @*/;
+int entropy_dev_random (byte*, size_t);
#endif
-
#if HAVE_DEV_URANDOM
-/** \ingroup ES_urandom_m ES_m
- */
-int entropy_dev_urandom(/*@out@*/ byte* data, size_t size)
- /*@globals fileSystem, internalState @*/
- /*@modifies data, fileSystem, internalState @*/;
+int entropy_dev_urandom(byte*, size_t);
#endif
-
#if HAVE_DEV_TTY
-/** \ingroup ES_tty_m ES_m
- */
-int entropy_dev_tty (/*@out@*/ byte* data, size_t size)
- /*@globals fileSystem, internalState @*/
- /*@modifies data, fileSystem, internalState @*/;
+int entropy_dev_tty (byte*, size_t);
#endif
#endif
* \ingroup PRNG_m PRNG_fips186_m
*/
-#include "system.h"
-#include "beecrypt.h"
-#include "fips186.h"
-#include "mpopt.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/fips186.h"
/*!\addtogroup PRNG_fips186_m
* \{
*/
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static uint32_t fips186hinit[5] = { 0xefcdab89U, 0x98badcfeU, 0x10325476U, 0xc3d2e1f0U, 0x67452301U };
-/*@-sizeoftype@*/
const randomGenerator fips186prng = {
"FIPS 186",
sizeof(fips186Param),
- (const randomGeneratorSetup) fips186Setup,
- (const randomGeneratorSeed) fips186Seed,
- (const randomGeneratorNext) fips186Next,
- (const randomGeneratorCleanup) fips186Cleanup
+ (randomGeneratorSetup) fips186Setup,
+ (randomGeneratorSeed) fips186Seed,
+ (randomGeneratorNext) fips186Next,
+ (randomGeneratorCleanup) fips186Cleanup
};
-/*@=sizeoftype@*/
-/**
- */
static int fips186init(register sha1Param* p)
- /*@modifies p @*/
{
- memcpy(p->h, fips186hinit, sizeof(p->h));
+ memcpy(p->h, fips186hinit, 5 * sizeof(uint32_t));
return 0;
}
if (mutex_init(&fp->lock, USYNC_THREAD, (void *) 0))
return -1;
# elif HAVE_PTHREAD_H
- /*@-nullpass@*/
- /*@-moduncon@*/
if (pthread_mutex_init(&fp->lock, (pthread_mutexattr_t *) 0))
return -1;
- /*@=moduncon@*/
- /*@=nullpass@*/
# endif
# endif
#endif
if (mutex_lock(&fp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_lock(&fp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
/* convert to multi-precision integer, and add to the state */
if (os2ip(seed, FIPS186_STATE_SIZE, data, size) == 0)
- (void) mpadd(FIPS186_STATE_SIZE, fp->state, seed);
+ mpadd(FIPS186_STATE_SIZE, fp->state, seed);
}
#ifdef _REENTRANT
# if WIN32
if (mutex_unlock(&fp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_unlock(&fp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
if (mutex_lock(&fp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_lock(&fp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
if (fp->digestremain == 0)
{
- (void) fips186init(&fp->param);
+ fips186init(&fp->param);
/* copy the 512 bits of state data into the sha1Param */
memcpy(fp->param.data, fp->state, MP_WORDS_TO_BYTES(FIPS186_STATE_SIZE));
/* process the data */
sha1Process(&fp->param);
-
+
#if WORDS_BIGENDIAN
memcpy(fp->digest, fp->param.h, 20);
#else
if (os2ip(dig, FIPS186_STATE_SIZE, fp->digest, 20) == 0)
{
/* set state to state + digest + 1 mod 2^512 */
- (void) mpadd (FIPS186_STATE_SIZE, fp->state, dig);
- (void) mpaddw(FIPS186_STATE_SIZE, fp->state, 1);
+ mpadd (FIPS186_STATE_SIZE, fp->state, dig);
+ mpaddw(FIPS186_STATE_SIZE, fp->state, 1);
}
/* else shouldn't occur */
/* we now have 5 words of pseudo-random data */
- fp->digestremain = (unsigned char) 20;
+ fp->digestremain = 20;
}
copy = (size > fp->digestremain) ? fp->digestremain : size;
memcpy(data, fp->digest+20-fp->digestremain, copy);
if (mutex_unlock(&fp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_unlock(&fp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
if (mutex_destroy(&fp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_destroy(&fp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
#ifndef _FIPS186_H
#define _FIPS186_H
+#include "beecrypt/beecrypt.h"
+
+#ifdef _REENTRANT
+# if WIN32
+# include <windows.h>
+# include <winbase.h>
+# endif
+#endif
+
#include "beecrypt.h"
#include "sha1.h"
typedef struct
{
#ifdef _REENTRANT
- # if WIN32
- HANDLE lock;
- # else
- bc_lock_t lock;
- # endif
+ bc_mutex_t lock;
#endif
- sha1Param param;
- mpw state[FIPS186_STATE_SIZE];
- byte digest[20];
+ sha1Param param;
+ mpw state[FIPS186_STATE_SIZE];
+ byte digest[20];
unsigned char digestremain;
} fips186Param;
extern "C" {
#endif
-/**
- */
-/*@observer@*/ /*@unchecked@*/
extern BEECRYPTAPI const randomGenerator fips186prng;
-/**
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-int fips186Setup (fips186Param* fp)
- /*@modifies fp @*/;
-/*@=exportlocal@*/
-
-/**
- */
-/*@-exportlocal@*/
+int fips186Setup (fips186Param*);
BEECRYPTAPI
-int fips186Seed (fips186Param* fp, const byte* data, size_t size)
- /*@modifies fp @*/;
-/*@=exportlocal@*/
-
-/**
- */
-/*@-exportlocal@*/
+int fips186Seed (fips186Param*, const byte*, size_t);
BEECRYPTAPI
-int fips186Next (fips186Param* fp, byte* data, size_t size)
- /*@modifies fp, data @*/;
-/*@=exportlocal@*/
-
-/**
- */
-/*@-exportlocal@*/
+int fips186Next (fips186Param*, byte*, size_t);
BEECRYPTAPI
-int fips186Cleanup(fips186Param* fp)
- /*@modifies fp @*/;
-/*@=exportlocal@*/
+int fips186Cleanup(fips186Param*);
#ifdef __cplusplus
}
+++ /dev/null
-.deps
-.depend
-.depend-done
-.libs
-Makefile
-Makefile.in
-config.cache
-config.guess
-config.log
-config.status
-config.sub
-configure
-libtool
-ltconfig
-ltmain.sh
-*.o
-*.lo
-stamp-h
-stamp-h.in
AUTOMAKE_OPTIONS = gnu no-dependencies
EXTRA_DIST = \
- aesopt.i586.m4 \
+ aesopt.x86.m4 \
aesopt.ppc.m4 \
alpha.m4 \
asmdefs.m4 \
+++ /dev/null
-dnl aesopt.i586.m4
-dnl
-dnl Copyright (c) 2003 Bob Deblier
-dnl
-dnl Author: Bob Deblier <bob.deblier@pandora.be>
-dnl
-dnl This library is free software; you can redistribute it and/or
-dnl modify it under the terms of the GNU Lesser General Public
-dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License, or (at your option) any later version.
-dnl
-dnl This library is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-dnl Lesser General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU Lesser General Public
-dnl License along with this library; if not, write to the Free Software
-dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-include(config.m4)
-include(ASM_SRCDIR/x86.m4)
-
-define(`sxrk',`
- movl (%esi),%eax
- movl 4(%esi),%ebx
- movl 8(%esi),%ecx
- movl 12(%esi),%edx
- bswap %eax
- bswap %ebx
- bswap %ecx
- bswap %edx
- xorl (%ebp),%eax
- xorl 4(%ebp),%ebx
- xorl 8(%ebp),%ecx
- xorl 12(%ebp),%edx
- movl %eax, (%esp)
- movl %ebx, 4(%esp)
- movl %ecx, 8(%esp)
- movl %edx,12(%esp)
-')
-
-define(`etfs',`
- movl $1+0(%ebp),%ecx
- movl $1+4(%ebp),%edx
-
- movzbl 3(%esp),%eax
- movzbl 7(%esp),%ebx
- xorl SYMNAME(_ae0)(,%eax,4),%ecx
- xorl SYMNAME(_ae0)(,%ebx,4),%edx
-
- movzbl 6(%esp),%eax
- movzbl 10(%esp),%ebx
- xorl SYMNAME(_ae1)(,%eax,4),%ecx
- xorl SYMNAME(_ae1)(,%ebx,4),%edx
-
- movzbl 9(%esp),%eax
- movzbl 13(%esp),%ebx
- xorl SYMNAME(_ae2)(,%eax,4),%ecx
- xorl SYMNAME(_ae2)(,%ebx,4),%edx
-
- movzbl 12(%esp),%eax
- movzbl (%esp),%ebx
- xorl SYMNAME(_ae3)(,%eax,4),%ecx
- xorl SYMNAME(_ae3)(,%ebx,4),%edx
-
- movl %ecx,16(%esp)
- movl %edx,20(%esp)
-
- movl $1+ 8(%ebp),%ecx
- movl $1+12(%ebp),%edx
-
- movzbl 11(%esp),%eax
- movzbl 15(%esp),%ebx
- xorl SYMNAME(_ae0)(,%eax,4),%ecx
- xorl SYMNAME(_ae0)(,%ebx,4),%edx
-
- movzbl 14(%esp),%eax
- movzbl 2(%esp),%ebx
- xorl SYMNAME(_ae1)(,%eax,4),%ecx
- xorl SYMNAME(_ae1)(,%ebx,4),%edx
-
- movzbl 1(%esp),%eax
- movzbl 5(%esp),%ebx
- xorl SYMNAME(_ae2)(,%eax,4),%ecx
- xorl SYMNAME(_ae2)(,%ebx,4),%edx
-
- movzbl 4(%esp),%eax
- movzbl 8(%esp),%ebx
- xorl SYMNAME(_ae3)(,%eax,4),%ecx
- xorl SYMNAME(_ae3)(,%ebx,4),%edx
-
- movl %ecx,24(%esp)
- movl %edx,28(%esp)
-')
-
-define(`esft',`
- movl $1+0(%ebp),%ecx
- movl $1+4(%ebp),%edx
-
- movzbl 19(%esp),%eax
- movzbl 23(%esp),%ebx
- xorl SYMNAME(_ae0)(,%eax,4),%ecx
- xorl SYMNAME(_ae0)(,%ebx,4),%edx
-
- movzbl 22(%esp),%eax
- movzbl 26(%esp),%ebx
- xorl SYMNAME(_ae1)(,%eax,4),%ecx
- xorl SYMNAME(_ae1)(,%ebx,4),%edx
-
- movzbl 25(%esp),%eax
- movzbl 29(%esp),%ebx
- xorl SYMNAME(_ae2)(,%eax,4),%ecx
- xorl SYMNAME(_ae2)(,%ebx,4),%edx
-
- movzbl 28(%esp),%eax
- movzbl 16(%esp),%ebx
- xorl SYMNAME(_ae3)(,%eax,4),%ecx
- xorl SYMNAME(_ae3)(,%ebx,4),%edx
-
- movl %ecx, (%esp)
- movl %edx, 4(%esp)
-
- movl $1+ 8(%ebp),%ecx
- movl $1+12(%ebp),%edx
-
- movzbl 27(%esp),%eax
- movzbl 31(%esp),%ebx
- xorl SYMNAME(_ae0)(,%eax,4),%ecx
- xorl SYMNAME(_ae0)(,%ebx,4),%edx
-
- movzbl 30(%esp),%eax
- movzbl 18(%esp),%ebx
- xorl SYMNAME(_ae1)(,%eax,4),%ecx
- xorl SYMNAME(_ae1)(,%ebx,4),%edx
-
- movzbl 17(%esp),%eax
- movzbl 21(%esp),%ebx
- xorl SYMNAME(_ae2)(,%eax,4),%ecx
- xorl SYMNAME(_ae2)(,%ebx,4),%edx
-
- movzbl 20(%esp),%eax
- movzbl 24(%esp),%ebx
- xorl SYMNAME(_ae3)(,%eax,4),%ecx
- xorl SYMNAME(_ae3)(,%ebx,4),%edx
-
- movl %ecx, 8(%esp)
- movl %edx,12(%esp)
-')
-
-define(`elr',`
- movl 0(%ebp),%ecx
- movl 4(%ebp),%edx
-
- movzbl 19(%esp),%eax
- movzbl 23(%esp),%ebx
- movl SYMNAME(_ae4)(,%eax,4),%eax
- movl SYMNAME(_ae4)(,%ebx,4),%ebx
- andl `$'0xff000000,%eax
- andl `$'0xff000000,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 22(%esp),%eax
- movzbl 26(%esp),%ebx
- movl SYMNAME(_ae4)(,%eax,4),%eax
- movl SYMNAME(_ae4)(,%ebx,4),%ebx
- andl `$'0xff0000,%eax
- andl `$'0xff0000,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 25(%esp),%eax
- movzbl 29(%esp),%ebx
- movl SYMNAME(_ae4)(,%eax,4),%eax
- movl SYMNAME(_ae4)(,%ebx,4),%ebx
- andl `$'0xff00,%eax
- andl `$'0xff00,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 28(%esp),%eax
- movzbl 16(%esp),%ebx
- movl SYMNAME(_ae4)(,%eax,4),%eax
- movl SYMNAME(_ae4)(,%ebx,4),%ebx
- andl `$'0xff,%eax
- andl `$'0xff,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movl %ecx, (%esp)
- movl %edx, 4(%esp)
-
- movl 8(%ebp),%ecx
- movl 12(%ebp),%edx
-
- movzbl 27(%esp),%eax
- movzbl 31(%esp),%ebx
- movl SYMNAME(_ae4)(,%eax,4),%eax
- movl SYMNAME(_ae4)(,%ebx,4),%ebx
- andl `$'0xff000000,%eax
- andl `$'0xff000000,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 30(%esp),%eax
- movzbl 18(%esp),%ebx
- movl SYMNAME(_ae4)(,%eax,4),%eax
- movl SYMNAME(_ae4)(,%ebx,4),%ebx
- andl `$'0xff0000,%eax
- andl `$'0xff0000,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 17(%esp),%eax
- movzbl 21(%esp),%ebx
- movl SYMNAME(_ae4)(,%eax,4),%eax
- movl SYMNAME(_ae4)(,%ebx,4),%ebx
- andl `$'0xff00,%eax
- andl `$'0xff00,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 20(%esp),%eax
- movzbl 24(%esp),%ebx
- movl SYMNAME(_ae4)(,%eax,4),%eax
- movl SYMNAME(_ae4)(,%ebx,4),%ebx
- andl `$'0xff,%eax
- andl `$'0xff,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movl %ecx, 8(%esp)
- movl %edx,12(%esp)
-')
-
-define(`eblock',`
- sxrk
-
- etfs(16)
- esft(32)
- etfs(48)
- esft(64)
- etfs(80)
- esft(96)
- etfs(112)
- esft(128)
- etfs(144)
-
- movl 256(%ebp),%eax
- cmp `$'10,%eax
- je $1
-
- esft(160)
- etfs(176)
-
- movl 256(%ebp),%eax
- cmp `$'12,%eax
- je $1
-
- esft(192)
- etfs(208)
-
- movl 256(%ebp),%eax
-
- .align 4
-$1:
- sall `$'4,%eax
- addl %eax,%ebp
-
- elr
-')
-
-define(`dtfs',`
- movl $1+0(%ebp),%ecx
- movl $1+4(%ebp),%edx
-
- movzbl 3(%esp),%eax
- movzbl 7(%esp),%ebx
- xorl SYMNAME(_ad0)(,%eax,4),%ecx
- xorl SYMNAME(_ad0)(,%ebx,4),%edx
-
- movzbl 14(%esp),%eax
- movzbl 2(%esp),%ebx
- xorl SYMNAME(_ad1)(,%eax,4),%ecx
- xorl SYMNAME(_ad1)(,%ebx,4),%edx
-
- movzbl 9(%esp),%eax
- movzbl 13(%esp),%ebx
- xorl SYMNAME(_ad2)(,%eax,4),%ecx
- xorl SYMNAME(_ad2)(,%ebx,4),%edx
-
- movzbl 4(%esp),%eax
- movzbl 8(%esp),%ebx
- xorl SYMNAME(_ad3)(,%eax,4),%ecx
- xorl SYMNAME(_ad3)(,%ebx,4),%edx
-
- movl %ecx,16(%esp)
- movl %edx,20(%esp)
-
- movl $1+ 8(%ebp),%ecx
- movl $1+12(%ebp),%edx
-
- movzbl 11(%esp),%eax
- movzbl 15(%esp),%ebx
- xorl SYMNAME(_ad0)(,%eax,4),%ecx
- xorl SYMNAME(_ad0)(,%ebx,4),%edx
-
- movzbl 6(%esp),%eax
- movzbl 10(%esp),%ebx
- xorl SYMNAME(_ad1)(,%eax,4),%ecx
- xorl SYMNAME(_ad1)(,%ebx,4),%edx
-
- movzbl 1(%esp),%eax
- movzbl 5(%esp),%ebx
- xorl SYMNAME(_ad2)(,%eax,4),%ecx
- xorl SYMNAME(_ad2)(,%ebx,4),%edx
-
- movzbl 12(%esp),%eax
- movzbl (%esp),%ebx
- xorl SYMNAME(_ad3)(,%eax,4),%ecx
- xorl SYMNAME(_ad3)(,%ebx,4),%edx
-
- movl %ecx,24(%esp)
- movl %edx,28(%esp)
-')
-
-define(`dsft',`
- movl $1+0(%ebp),%ecx
- movl $1+4(%ebp),%edx
-
- movzbl 19(%esp),%eax
- movzbl 23(%esp),%ebx
- xorl SYMNAME(_ad0)(,%eax,4),%ecx
- xorl SYMNAME(_ad0)(,%ebx,4),%edx
-
- movzbl 30(%esp),%eax
- movzbl 18(%esp),%ebx
- xorl SYMNAME(_ad1)(,%eax,4),%ecx
- xorl SYMNAME(_ad1)(,%ebx,4),%edx
-
- movzbl 25(%esp),%eax
- movzbl 29(%esp),%ebx
- xorl SYMNAME(_ad2)(,%eax,4),%ecx
- xorl SYMNAME(_ad2)(,%ebx,4),%edx
-
- movzbl 20(%esp),%eax
- movzbl 24(%esp),%ebx
- xorl SYMNAME(_ad3)(,%eax,4),%ecx
- xorl SYMNAME(_ad3)(,%ebx,4),%edx
-
- movl %ecx, (%esp)
- movl %edx, 4(%esp)
-
- movl $1+ 8(%ebp),%ecx
- movl $1+12(%ebp),%edx
-
- movzbl 27(%esp),%eax
- movzbl 31(%esp),%ebx
- xorl SYMNAME(_ad0)(,%eax,4),%ecx
- xorl SYMNAME(_ad0)(,%ebx,4),%edx
-
- movzbl 22(%esp),%eax
- movzbl 26(%esp),%ebx
- xorl SYMNAME(_ad1)(,%eax,4),%ecx
- xorl SYMNAME(_ad1)(,%ebx,4),%edx
-
- movzbl 17(%esp),%eax
- movzbl 21(%esp),%ebx
- xorl SYMNAME(_ad2)(,%eax,4),%ecx
- xorl SYMNAME(_ad2)(,%ebx,4),%edx
-
- movzbl 28(%esp),%eax
- movzbl 16(%esp),%ebx
- xorl SYMNAME(_ad3)(,%eax,4),%ecx
- xorl SYMNAME(_ad3)(,%ebx,4),%edx
-
- movl %ecx, 8(%esp)
- movl %edx,12(%esp)
-')
-
-define(`dlr',`
- movl 0(%ebp),%ecx
- movl 4(%ebp),%edx
-
- movzbl 19(%esp),%eax
- movzbl 23(%esp),%ebx
- movl SYMNAME(_ad4)(,%eax,4),%eax
- movl SYMNAME(_ad4)(,%ebx,4),%ebx
- andl `$'0xff000000,%eax
- andl `$'0xff000000,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 30(%esp),%eax
- movzbl 18(%esp),%ebx
- movl SYMNAME(_ad4)(,%eax,4),%eax
- movl SYMNAME(_ad4)(,%ebx,4),%ebx
- andl `$'0xff0000,%eax
- andl `$'0xff0000,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 25(%esp),%eax
- movzbl 29(%esp),%ebx
- movl SYMNAME(_ad4)(,%eax,4),%eax
- movl SYMNAME(_ad4)(,%ebx,4),%ebx
- andl `$'0xff00,%eax
- andl `$'0xff00,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 20(%esp),%eax
- movzbl 24(%esp),%ebx
- movl SYMNAME(_ad4)(,%eax,4),%eax
- movl SYMNAME(_ad4)(,%ebx,4),%ebx
- andl `$'0xff,%eax
- andl `$'0xff,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movl %ecx, (%esp)
- movl %edx, 4(%esp)
-
- movl 8(%ebp),%ecx
- movl 12(%ebp),%edx
-
- movzbl 27(%esp),%eax
- movzbl 31(%esp),%ebx
- movl SYMNAME(_ad4)(,%eax,4),%eax
- movl SYMNAME(_ad4)(,%ebx,4),%ebx
- andl `$'0xff000000,%eax
- andl `$'0xff000000,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 22(%esp),%eax
- movzbl 26(%esp),%ebx
- movl SYMNAME(_ad4)(,%eax,4),%eax
- movl SYMNAME(_ad4)(,%ebx,4),%ebx
- andl `$'0xff0000,%eax
- andl `$'0xff0000,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 17(%esp),%eax
- movzbl 21(%esp),%ebx
- movl SYMNAME(_ad4)(,%eax,4),%eax
- movl SYMNAME(_ad4)(,%ebx,4),%ebx
- andl `$'0xff00,%eax
- andl `$'0xff00,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movzbl 28(%esp),%eax
- movzbl 16(%esp),%ebx
- movl SYMNAME(_ad4)(,%eax,4),%eax
- movl SYMNAME(_ad4)(,%ebx,4),%ebx
- andl `$'0xff,%eax
- andl `$'0xff,%ebx
- xorl %eax,%ecx
- xorl %ebx,%edx
-
- movl %ecx, 8(%esp)
- movl %edx,12(%esp)
-')
-
-define(`dblock',`
- sxrk
-
- dtfs(16)
- dsft(32)
- dtfs(48)
- dsft(64)
- dtfs(80)
- dsft(96)
- dtfs(112)
- dsft(128)
- dtfs(144)
-
- movl 256(%ebp),%eax
- cmp `$'10,%eax
- je $1
-
- dsft(160)
- dtfs(176)
-
- movl 256(%ebp),%eax
- cmp `$'12,%eax
- je $1
-
- dsft(192)
- dtfs(208)
-
- movl 256(%ebp),%eax
-
- .align 4
-$1:
- sall `$'4,%eax
- addl %eax,%ebp
-
- dlr
-')
-
-C_FUNCTION_BEGIN(aesEncrypt)
- pushl %edi
- pushl %esi
- pushl %ebp
- pushl %ebx
-
- movl 20(%esp),%ebp
- movl 24(%esp),%edi
- movl 28(%esp),%esi
-
- subl `$'32,%esp
-
- eblock(LOCAL(00))
-
- movl (%esp),%eax
- movl 4(%esp),%ebx
- movl 8(%esp),%ecx
- movl 12(%esp),%edx
- bswap %eax
- bswap %ebx
- bswap %ecx
- bswap %edx
- movl %eax, (%edi)
- movl %ebx, 4(%edi)
- movl %ecx, 8(%edi)
- movl %edx,12(%edi)
-
- addl `$'32,%esp
-
- xorl %eax,%eax
-
- popl %ebx
- popl %ebp
- popl %esi
- popl %edi
- ret
-C_FUNCTION_END(aesEncrypt)
-
-
-C_FUNCTION_BEGIN(aesDecrypt)
- pushl %edi
- pushl %esi
- pushl %ebp
- pushl %ebx
-
- movl 20(%esp),%ebp
- movl 24(%esp),%edi
- movl 28(%esp),%esi
-
- subl `$'32,%esp
-
- dblock(LOCAL(01))
-
- movl (%esp),%eax
- movl 4(%esp),%ebx
- movl 8(%esp),%ecx
- movl 12(%esp),%edx
- bswap %eax
- bswap %ebx
- bswap %ecx
- bswap %edx
- movl %eax, (%edi)
- movl %ebx, 4(%edi)
- movl %ecx, 8(%edi)
- movl %edx,12(%edi)
-
- addl `$'32,%esp
-
- xorl %eax,%eax
-
- popl %ebx
- popl %ebp
- popl %esi
- popl %edi
- ret
-C_FUNCTION_END(aesDecrypt)
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/ppc.m4)
define(`s0',`r24')
define(`t3',`r31')
define(`sxrk',`
-ifelse(ASM_BIGENDIAN,yes,`
lwz s0, 0($2)
lwz s1, 4($2)
lwz s2, 8($2)
lwz s3,12($2)
-',`
- li r0,0
- lwbrx s0,$2,r0
- li r0,4
- lwbrx s1,$2,r0
- li r0,8
- lwbrx s2,$2,r0
- li r0,13
- lwbrx s0,$2,r0
-')
lwz r7, 0($1)
lwz r8, 4($1)
lwz r9, 8($1)
lwz t1,$2+ 4($1)
lwz t2,$2+ 8($1)
lwz t3,$2+12($1)
-
+ifelse(ASM_BIGENDIAN,yes,`
rlwinm r7,s0,10,22,29
rlwinm r8,s1,10,22,29
rlwinm r9,s2,10,22,29
xor t1,t1,r8
xor t2,t2,r9
xor t3,t3,r10
+',`
+ dnl to be done
+')
la r12,-3072(r12)
')
lwz s1,$2+ 4($1)
lwz s2,$2+ 8($1)
lwz s3,$2+12($1)
-
+ifelse(ASM_BIGENDIAN,yes,`
rlwinm r7,t0,10,22,29
rlwinm r8,t1,10,22,29
rlwinm r9,t2,10,22,29
xor s1,s1,r8
xor s2,s2,r9
xor s3,s3,r10
-
+',`
+ dnl to be done
+')
la r12,-3072(r12)
')
lwz s3,12($1)
la r12,4096(r12)
-
+ifdef(ASM_BIGENDIAN,yes,`
rlwinm r7,t0,10,22,29
rlwinm r8,t1,10,22,29
rlwinm r9,t2,10,22,29
xor s1,s1,r8
xor s2,s2,r9
xor s3,s3,r10
-
+',`
+dnl to be done
+')
la r12,-4096(r12)
')
C_FUNCTION_BEGIN(aesEncrypt)
subi r1,r1,32
- stmw r24,0(r1)
+ stw r24, 0(r1)
+ stw r25, 4(r1)
+ stw r26, 8(r1)
+ stw r27,12(r1)
+ stw r28,16(r1)
+ stw r29,20(r1)
+ stw r30,24(r1)
+ stw r31,28(r1)
LOAD_ADDRESS(_ae0,r12)
eblock(r3,r5,LOCAL(00))
-ifelse(ASM_BIGENDIAN,yes,`
stw s0, 0(r4)
stw s1, 4(r4)
stw s2, 8(r4)
stw s3,12(r4)
-',`
- li r0,0
- stwbrx s0,r4,r0
- li r0,4
- stwbrx s1,r4,r0
- li r0,8
- stwbrx s2,r4,r0
- li r0,12
- stwbrx s3,r4,r0
-')
li r3,0
- lmw r24,0(r1)
+ lwzx 28(r1),r31
+ lwzx 24(r1),r30
+ lwzx 20(r1),r29
+ lwzx 16(r1),r28
+ lwzx 12(r1),r27
+ lwzx 8(r1),r26
+ lwzx 4(r1),r25
+ lwzx 0(r1),r24
addi r1,r1,32
blr
C_FUNCTION_END(aesEncrypt)
dblock(r3,r5,LOCAL(01))
-ifelse(ASM_BIGENDIAN,yes,`
stw s0, 0(r4)
stw s1, 4(r4)
stw s2, 8(r4)
stw s3,12(r4)
-',`
- li r0,0
- stwbrx s0,r4,r0
- li r0,4
- stwbrx s1,r4,r0
- li r0,8
- stwbrx s2,r4,r0
- li r0,12
- stwbrx s3,r4,r0
-')
li r3,0
lmw r24,0(r1)
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/x86.m4)
ifdef(`USE_MMX',`
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/x86.m4)
dnl during this macro we assume:
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/ppc.m4)
define(`round',`
+++ /dev/null
-/*
- * fips180opt.ia64.S
- *
- * Assembler optimized SHA-1 routines for ia64 (Intel Itanium)
- *
- * Warning: this code is incomplete and only contains a rough prototype!
- *
- * Compile target is GNU Assembler
- *
- * Copyright (c) 2001 Virtual Unlimited B.V.
- *
- * Author: Bob Deblier <bob@virtualunlimited.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * 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,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "config.gas.h"
-
-#define saved_pfs r14
-#define saved_lc r15
-
-#define param r16
-
- .file "fips180opt.ia64.S"
-
- .text
-
- .equ K00, 0x5a827999
- .equ K20, 0x6ed9eba1
- .equ K40, 0x8f1bbcdc
- .equ K60, 0xca62c1d6
-
- .equ PARAM_H, 0
- .equ PARAM_DATA, 20
-
-/* for optimization, I have to see how I can parallellize the code
-
- e = ROTL32(a, 5) + ((b&(c^d))^d) + e + w + K
- b = ROTR32(b, 2);
-
-step1: load w, tmp0 = mix a, tmp1 = c xor d, e += K;;
-step2: tmp0 >>= 27, tmp1 &= b, e += w, b = mix b;;
-step3: b >>= 2, e += tmp0, tmp1 ^= d;;
-step4: e += tmp1, load next w, tmp0 = mix d, tmp1 = b xor d, d += K;;
-step5: etc.
-
- d = ROTL32(d, 5) + ((a&(b^c))^c) + d + w + K
- a = ROTR32(a, 2)
-*/
-
- .macro subround1 a b c d e w
- ld4 r19 = [\w],4
- add \e = $K00,\e
- xor r21 = \c,\d
- mix4.r r20 = \a,\a;;
- add \e = \e,r19
- and r21 = r21,\b
- shr.u r20 = 27,r20
- mix4.r r22 = \b,\b;;
- add \e = r20,\e
- xor r21 = r21,\d
- shr.u \b = 2,r22;;
- add \e = r21,\e
- .endm
-
- .macro subround2 a b c d e w
- ld4 r19 = [\w],4
- add \e = $K20,\e
- xor r21 = \b,\c
- mix4.r r20 = \a,\a;;
- add \e = \e,r19
- xor r21 = r21,\d
- shr.u r20 = 27,r20
- mix4.r \b = \b,\b;;
- add \e = r20,\e
- shr.u \b = 2,\b;;
- add \e = r21,\e
- .endm
-
- .macro subround3 a b c d e w
- ld4 r19 = [\w],4
- add \e = $K40,\e
- xor r21 = \b,\c
- and r22 = \b,\c
- mix4.r r20 = \a,\a;;
- add \e = \e,r19
- and r21 = r21,\d
- shr.u r20 = 27,r20
- mix4.r \b = \b,\b;;
- add \e = r20,\e
- or r21 = r21,r22
- shr.u \b = 2,\b;;
- add \e = r21,\e
- .endm
-
- .macro subround4 a b c d e w
- ld4 r19 = [\w],4
- add \e = $K60,\e
- xor r21 = \b,\c
- mix4.r r20 = \a,\a;;
- add \e = \e,r19
- xor r21 = r21,\d
- shr.u r20 = 27,r20
- mix4.r \b = \b,\b;;
- add \e = r20,\e
- shr.u \b = 2,\b;;
- add \e = r21,\e
- .endm
-
- .align 32
- .global sha1Process#
- .proc sha1Process#
-
-sha1Process:
- alloc saved_pfs = ar.pfs,2,0,0,0
- mov saved_lc = ar.lc
-
-/* r16 will be h */
-/* r17 will be pdata */
-/* There must be something neat I can do to speed up expansion (xor/rotate)
-
- The following should work, if we use 24 rotating registers; speedup should be dramatic
- preload with swapped values 0-15
-
- rought draft: have to translate this to more precise rotating registers and predicates.
-
- /----------\
- |xor[2],[0]|
- +----------+----------\
- |xor[8] |xor[3],[1]|
- +----------+----------+----------\
- |xor[13] |xor[9] |xor[4],[2]|
- +----------+----------+----------+----------\
- |mix4.r[16]|xor[14] |xor[10] |xor[5],[3]|
- +----------+----------+----------+----------+-----------\
- |shr[16] |mix4.r[17]|xor[15] |xor[11] |xor[6],[4] |
- +----------+----------+----------+----------+-----------+----------\
- |store[16] |shr[17] |mix4.r[18]|xor[16] |xor[12] |xor[7],[5]|
- \----------+----------+----------+----------+-----------+----------+----------\
- |store[17] |shr[18] |mix4.r[19]|xor[17] |xor[13] |xor[8],[6]|
- \----------+----------+----------+-----------+----------+----------+----------\
- |store[18] |shr[19] |mix4.r[20] |xor[18] |xor[14] |xor[9],[7]|
- \----------+----------+-----------+----------+----------+----------+----------\
- | | | | | | |
-*/
- alloc saved_pfs = ar.pfs,3,21,0,24
-
- /* look into big-endian loads, followed by little-endian stores */
-#if !WORD_BIGENDIAN
- // save UM.be
- // set UM.be to one
-#endif
- /*
-.L00:
- ld4 r32 = [ra],4
-
-br.ctop.sptk .L00;;
-#if !WORD_BIGENDIAN
- // restore UM.be
- /*
- mov ra = rd
- mov rb = rd;;
- add rb = 4,rd;;
- st4 [ra],8 = r48
- st4 [rb],8 = r47;;
- st4 [ra],8 = r46
- st4 [rb],8 = r45;;
- st4 [ra],8 = r44
- st4 [rb],8 = r43;;
- st4 [ra],8 = r42
- st4 [rb],8 = r41;;
- st4 [ra],8 = r40
- st4 [rb],8 = r39;;
- st4 [ra],8 = r38
- st4 [rb],8 = r37;;
- st4 [ra],8 = r36
- st4 [rb],8 = r35;;
- st4 [ra],8 = r34
- st4 [rb],8 = r33;;
- */
-#endif
- /* also add a conditional which will save the original swapped words! */
- /* the expansion loop will translate to something like this: */
-.L01:
- /* put three xors together */
- (p16) xor r32 = r46,r48
- (p17) xor r33 = r33,r41
- (p18) xor r34 = r34,r37
- (p19) mix4.r r35 = r35,r35
- (p20) shr.u r36 = 31,r36
- (p21) st4 [],4 = r37
- br.ctop.sptk .L01;;
-
- etc.
-*/
- mov ar.lc = r15
- mov ar.pfs = r14
- br.ret.sptk b0
- .endp sha1Process#
-
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/alpha.m4)
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
C_FUNCTION_BEGIN(mpsetmul)
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/ia64.m4)
define(`sze',`r14')
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/m68k.m4)
dnl works
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Lesser General Public License for more details.
dnl
-dnl You shoulwz have received a copy of the GNU Lesser General Public
+dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/ppc.m4)
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/ppc64.m4)
dnl mpopt.s390x.m4
dnl
-dnl Copyright (c) 2003 Bob Deblier
+dnl Copyright (c) 2003, 2004 Bob Deblier
dnl
-dnl Author: Bob Deblier <bob.deblier@pandora.be>
+dnl Author: Bob Deblier <bob.deblier@telenet.be>
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
C_FUNCTION_BEGIN(mpsetmul)
C_FUNCTION_END(mpaddmul)
-divert(-1)
-dnl function fails; illegal instruction on mlgr
-dnl I've tried many alternative, but nothing seems to work so far
C_FUNCTION_BEGIN(mpaddsqrtrc)
stmg %r6,%r7,48(%r15)
sllg %r5,%r2,3
LOCAL(mpaddsqrtrc_loop):
lg %r1,0(%r4,%r5)
- mlgr %r1,%r1
+ mlg %r0,0(%r4,%r5)
algr %r1,%r2
alcgr %r0,%r7
xgr %r2,%r2
stg %r1,8(%r3,%r6)
stg %r0,0(%r3,%r6)
aghi %r5,-8
+ aghi %r6,-16
jhe LOCAL(mpaddsqrtrc_loop)
lmg %r6,%r7,48(%r15)
br %r14
C_FUNCTION_END(mpaddsqrtrc)
-divert(0)
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/sparc.m4)
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/sparc.m4)
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/x86.m4)
movl 12(%esp),%edi
xorl %eax,%eax
- repz stosl
+ repz; stosl
popl %edi
ret
movl 12(%esp),%edi
movl 16(%esp),%eax
- repz stosl
+ repz; stosl
popl %edi
ret
.file "mpopt.s"
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/x86_64.m4)
C_FUNCTION_BEGIN(mpfill)
movq %rdi,%rcx
movq %rsi,%rdi
- movq %rdx,%rdi
+ movq %rdx,%rax
repz stosq
ret
C_FUNCTION_END(mpfill)
C_FUNCTION_END(mpodd)
+C_FUNCTION_BEGIN(mpaddw)
+ movq %rdx,%rax
+ xorq %rdx,%rdx
+ leaq -8(%rsi,%rdi,8),%rsi
+ addq %rax,(%rsi)
+ decq %rdi
+ jz LOCAL(mpaddw_skip)
+ leaq -8(%rsi),%rsi
+
+ .align 4
+LOCAL(mpaddw_loop):
+ adcq %rdx,(%rsi)
+ leaq -8(%rsi),%rsi
+ decq %rdi
+ jnz LOCAL(mpaddw_loop)
+LOCAL(mpaddw_skip):
+ sbbq %rax,%rax
+ negq %rax
+ ret
+C_FUNCTION_END(mpaddw)
+
+
+C_FUNCTION_BEGIN(mpsubw)
+ movq %rdx,%rax
+ xorq %rdx,%rdx
+ leaq -8(%rsi,%rdi,8),%rsi
+ subq %rax,(%rsi)
+ decq %rdi
+ jz LOCAL(mpsubw_skip)
+ leaq -8(%rsi),%rsi
+
+ .align 4
+LOCAL(mpsubw_loop):
+ sbbq %rdx,(%rsi)
+ leaq -8(%rsi),%rsi
+ decq %rdi
+ jnz LOCAL(mpsubw_loop)
+LOCAL(mpsubw_skip):
+ sbbq %rax,%rax
+ negq %rax
+ ret
+C_FUNCTION_END(mpsubw)
+
+
+C_FUNCTION_BEGIN(mpadd)
+ xorq %r8,%r8
+ decq %rdi
+
+ .align 4
+LOCAL(mpadd_loop):
+ movq (%rdx,%rdi,8),%rax
+ movq (%rsi,%rdi,8),%r8
+ adcq %rax,%r8
+ movq %r8,(%rsi,%rdi,8)
+ decq %rdi
+ jns LOCAL(mpadd_loop)
+
+ sbbq %rax,%rax
+ negq %rax
+ ret
+C_FUNCTION_END(mpadd)
+
+
+C_FUNCTION_BEGIN(mpsub)
+ xorq %r8,%r8
+ decq %rdi
+
+ .align 4
+LOCAL(mpsub_loop):
+ movq (%rdx,%rdi,8),%rax
+ movq (%rsi,%rdi,8),%r8
+ sbbq %rax,%r8
+ movq %r8,(%rsi,%rdi,8)
+ decq %rdi
+ jns LOCAL(mpsub_loop)
+
+ sbbq %rax,%rax
+ negq %rax
+ ret
+C_FUNCTION_END(mpsub)
+
+
+C_FUNCTION_BEGIN(mpdivtwo)
+ leaq (%rsi,%rdi,8),%rsi
+ negq %rdi
+ xorq %rax,%rax
+
+ .align 4
+LOCAL(mpdivtwo_loop):
+ rcrq `$'1,(%rsi,%rdi,8)
+ inc %rdi
+ jnz LOCAL(mpdivtwo_loop)
+
+ ret
+C_FUNCTION_END(mpdivtwo)
+
+
+C_FUNCTION_BEGIN(mpmultwo)
+ xorq %rdx,%rdx
+ decq %rdi
+
+ .align 4
+LOCAL(mpmultwo_loop):
+ movq (%rsi,%rdi,8),%rax
+ adcq %rax,%rax
+ movq %rax,(%rsi,%rdi,8)
+ decq %rdi
+ jns LOCAL(mpmultwo_loop)
+
+ sbbq %rax,%rax
+ negq %rax
+ ret
+C_FUNCTION_END(mpmultwo)
+
+
C_FUNCTION_BEGIN(mpsetmul)
movq %rcx,%r8
movq %rdi,%rcx
movq %rdx,%rax
ret
C_FUNCTION_END(mpaddmul)
+
+
+C_FUNCTION_BEGIN(mpaddsqrtrc)
+ movq %rdi,%rcx
+ movq %rsi,%rdi
+ movq %rdx,%rsi
+
+ xorq %r8,%r8
+ decq %rcx
+
+ leaq (%rdi,%rcx,8),%rdi
+ leaq (%rdi,%rcx,8),%rdi
+
+ .align 4
+LOCAL(mpaddsqrtrc_loop):
+ movq (%rsi,%rcx,8),%rax
+ mulq %rax
+ addq %r8,%rax
+ adcq `$'0,%rdx
+ addq %rax,8(%rdi)
+ adcq %rdx,0(%rdi)
+ sbbq %r8,%r8
+ negq %r8
+ subq `$'16,%rdi
+ decq %rcx
+ jns LOCAL(mpaddsqrtrc_loop)
+
+ movq %r8,%rax
+ ret
+C_FUNCTION_END(mpaddsqrtrc)
dnl License along with this library; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-ifelse(substr(ASM_OS,0,5),linux,`
-define(USE_NUMERIC_REGISTERS)
-')
-
ifelse(substr(ASM_OS,0,3),aix,`
define(USE_NUMERIC_REGISTERS)
undefine(`C_FUNCTION_BEGIN')
.tc $1[TC],$1[RW]
')
.machine "ppc"
-',`
+')
+
+ifelse(substr(ASM_OS,0,6),darwin,`
+define(LOAD_ADDRESS,`
+ lis $2,hi16($1)
+ la $2,lo16($1)($2)
+')
+define(EXTERNAL_VARIABLE)
+')
+
+ifelse(substr(ASM_OS,0,5),linux,`
+define(USE_NUMERIC_REGISTERS)
define(LOAD_ADDRESS,`
lis $2,$1@ha
la $2,$1@l($2)
define(EXTERNAL_VARIABLE)
')
+
ifdef(`USE_NUMERIC_REGISTERS',`
define(r0,0)
define(r1,1)
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
ifelse(substr(ASM_OS,0,3),aix,`
+define(USE_NUMERIC_REGISTERS)
undefine(`C_FUNCTION_BEGIN')
define(C_FUNCTION_BEGIN,`
.toc
')
.machine "ppc64"
+')
+
+ifelse(substr(ASM_OS,0,5),linux,`
+define(USE_NUMERIC_REGISTERS)
+dnl trampoline definitions from glibc-2.3.2/sysdeps/powerpc/powerpc64/dl-machine.h
+undefine(`C_FUNCTION_BEGIN')
+define(C_FUNCTION_BEGIN,`
+ .section .text
+ .align 2
+ .globl .$1
+ .type .$1,@function
+ .section ".opd","aw"
+ .align 3
+ .globl $1
+ .size $1,24
+$1:
+ .quad .$1,.TOC.@tocbase,0
+ .previous
+.$1:
+')
+undefine(`C_FUNCTION_END')
+define(C_FUNCTION_END,`
+.LT_$1:
+ .long 0
+ .byte 0x00,0x0c,0x24,0x40,0x00,0x00,0x00,0x00
+ .long .LT_$1 - .$1
+ .short .LT_$1_name_end-.LT_$1_name_start
+.LT_$1_name_start:
+ .ascii "$1"
+.LT_$1_name_end:
+ .align 2
+ .size .$1,. - .$1
+ .previous
+')
+')
- .set r0,0
- .set r1,1
- .set r2,2
- .set r3,3
- .set r4,4
- .set r5,5
- .set r6,6
- .set r7,7
- .set r8,8
- .set r9,9
- .set r10,10
- .set r11,11
- .set r12,12
- .set r13,13
- .set r14,14
- .set r15,15
- .set r16,16
- .set r17,17
- .set r18,18
- .set r19,19
- .set r20,20
- .set r21,21
- .set r22,22
- .set r23,23
- .set r24,24
- .set r25,25
- .set r26,26
- .set r27,27
- .set r28,28
- .set r29,29
- .set r30,30
- .set r31,31
+ifdef(`USE_NUMERIC_REGISTERS',`
+define(r0,0)
+define(r1,1)
+define(r2,2)
+define(r3,3)
+define(r4,4)
+define(r5,5)
+define(r6,6)
+define(r7,7)
+define(r8,8)
+define(r9,9)
+define(r10,10)
+define(r11,11)
+define(r12,12)
+define(r13,13)
+define(r14,14)
+define(r15,15)
+define(r16,16)
+define(r17,17)
+define(r18,18)
+define(r19,19)
+define(r20,20)
+define(r21,21)
+define(r22,22)
+define(r23,23)
+define(r24,24)
+define(r25,25)
+define(r26,26)
+define(r27,27)
+define(r28,28)
+define(r29,29)
+define(r30,30)
+define(r31,31)
')
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include(config.m4)
+include(ASM_SRCDIR/asmdefs.m4)
include(ASM_SRCDIR/x86.m4)
- .equ K00, 0x5a827999
- .equ K20, 0x6ed9eba1
- .equ K40, 0x8f1bbcdc
- .equ K60, 0xca62c1d6
+ .set K00, 0x5a827999
+ .set K20, 0x6ed9eba1
+ .set K40, 0x8f1bbcdc
+ .set K60, 0xca62c1d6
- .equ PARAM_H, 0
- .equ PARAM_DATA, 20
+ .set PARAM_H, 0
+ .set PARAM_DATA, 20
define(`subround1',`
movl $2,%ecx
--- /dev/null
+/*
+ * Copyright (c) 2003 Bob Deblier
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef _BEECRYPT_GNU_H
+#define _BEECRYPT_GNU_H
+
+#include <inttypes.h>
+#include <stdint.h>
+
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <string.h>
+#include <unistd.h>
+#include <dlfcn.h>
+
+typedef pthread_cond_t bc_cond_t;
+typedef pthread_mutex_t bc_mutex_t;
+typedef pthread_t bc_thread_t;
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* WARNING: overriding this value is dangerous; some assembler routines
+ * make assumptions about the size set by the configure script
+ */
+#if !defined(MP_WBITS)
+# define MP_WBITS 64U
+#endif
+
+#endif
@INCLUDE_INTTYPES_H@
@INCLUDE_STDINT_H@
@INCLUDE_SYNCH_H@
+@INCLUDE_THREAD_H@
@INCLUDE_PTHREAD_H@
@INCLUDE_STDIO_H@
-@INCLUDE_STDLIB_H@
+@INCLUDE_STDLIB_H@
@INCLUDE_MALLOC_H@
@INCLUDE_STRING_H@
@INCLUDE_UNISTD_H@
+@INCLUDE_DLFCN_H@
-@TYPEDEF_BC_LOCK_T@
+@TYPEDEF_BC_COND_T@
+@TYPEDEF_BC_MUTEX_T@
+@TYPEDEF_BC_THREAD_T@
+
+@TYPEDEF_SIZE_T@
@TYPEDEF_INT8_T@
@TYPEDEF_INT16_T@
@TYPEDEF_UINT32_T@
@TYPEDEF_UINT64_T@
-#if !defined(MP_WBITS) /* dangerous; some assembler routines make assumptions */
+/* WARNING: overriding this value is dangerous; some assembler routines
+ * make assumptions about the size set by the configure script
+ */
+#if !defined(MP_WBITS)
# define MP_WBITS @MP_WBITS@
#endif
* \ingroup HMAC_m
*/
-#include "system.h"
-#include "hmac.h"
-#include "mp.h"
-#include "endianness.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/hmac.h"
+#include "beecrypt/endianness.h"
/*!\addtogroup HMAC_m
* \{
int hmacSetup(byte* kxi, byte* kxo, const hashFunction* hash, hashFunctionParam* param, const byte* key, size_t keybits)
{
register unsigned int i;
+
size_t keybytes = keybits >> 3;
/* if the key is too large, hash it first */
if (hash->digest(param, kxi))
return -1;
-/*@-mayaliasunique@*/
memcpy(kxo, kxi, keybytes = hash->digestsize);
-/*@=mayaliasunique@*/
}
else if (keybytes > 0)
{
-/*@-mayaliasunique@*/
memcpy(kxi, key, keybytes);
memcpy(kxo, key, keybytes);
-/*@=mayaliasunique@*/
}
else
return -1;
#ifndef _HMAC_H
#define _HMAC_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
/*!\ingroup HMAC_m
*/
extern "C" {
#endif
-/**
- */
-BEECRYPTAPI
-int hmacSetup (byte* kxi, byte* kxo, const hashFunction* hash, hashFunctionParam* param, const byte* key, size_t keybits)
- /*@modifies kxi, kxo, param @*/;
+/* not used directly as keyed hash function, but instead used as generic methods */
-/**
- */
BEECRYPTAPI
-int hmacReset (const byte* kxi, const hashFunction* hash, hashFunctionParam* param)
- /*@modifies param @*/;
-
-/**
- */
+int hmacSetup ( byte*, byte*, const hashFunction*, hashFunctionParam*, const byte*, size_t);
BEECRYPTAPI
-int hmacUpdate(const hashFunction* hash, hashFunctionParam* param, const byte* data, size_t size)
- /*@modifies param @*/;
-
-/**
- */
+int hmacReset (const byte*, const hashFunction*, hashFunctionParam*);
+BEECRYPTAPI
+int hmacUpdate( const hashFunction*, hashFunctionParam*, const byte*, size_t);
BEECRYPTAPI
-int hmacDigest(const byte* kxo, const hashFunction* hash, hashFunctionParam* param, /*@out@*/ byte* data)
- /*@modifies data @*/;
+int hmacDigest( const byte*, const hashFunction*, hashFunctionParam*, byte*);
#ifdef __cplusplus
}
* \ingroup HMAC_m HMAC_md5_m
*/
-#include "system.h"
-#include "hmacmd5.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/hmacmd5.h"
/*!\addtogroup HMAC_md5_m
* \{
*/
-/*@-sizeoftype@*/
const keyedHashFunction hmacmd5 = {
"HMAC-MD5",
sizeof(hmacmd5Param),
- 64U,
- 4U * sizeof(uint32_t),
- 64U,
- 512U,
- 32U,
- (const keyedHashFunctionSetup) hmacmd5Setup,
- (const keyedHashFunctionReset) hmacmd5Reset,
- (const keyedHashFunctionUpdate) hmacmd5Update,
- (const keyedHashFunctionDigest) hmacmd5Digest
+ 64,
+ 16,
+ 64,
+ 512,
+ 32,
+ (keyedHashFunctionSetup) hmacmd5Setup,
+ (keyedHashFunctionReset) hmacmd5Reset,
+ (keyedHashFunctionUpdate) hmacmd5Update,
+ (keyedHashFunctionDigest) hmacmd5Digest
};
-/*@=sizeoftype@*/
-/*@-type@*/ /* fix: cast to (hashFunctionParam*) */
int hmacmd5Setup (hmacmd5Param* sp, const byte* key, size_t keybits)
{
return hmacSetup(sp->kxi, sp->kxo, &md5, &sp->mparam, key, keybits);
{
return hmacDigest(sp->kxo, &md5, &sp->mparam, data);
}
-/*@=type@*/
/*!\}
*/
#ifndef _HMACMD5_H
#define _HMACMD5_H
-#include "hmac.h"
-#include "md5.h"
+#include "beecrypt/hmac.h"
+#include "beecrypt/md5.h"
/*!\ingroup HMAC_md5_m
*/
extern "C" {
#endif
-/** \ingroup HMAC_md5_m
- */
-/*@observer@*/ /*@unchecked@*/
extern BEECRYPTAPI const keyedHashFunction hmacmd5;
-/** \ingroup HMAC_md5_m
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-int hmacmd5Setup (hmacmd5Param* sp, const byte* key, size_t keybits)
- /*@globals md5 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_md5_m
- */
-/*@-exportlocal@*/
+int hmacmd5Setup (hmacmd5Param*, const byte*, size_t);
BEECRYPTAPI
-int hmacmd5Reset (hmacmd5Param* sp)
- /*@globals md5 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_md5_m
- */
-/*@-exportlocal@*/
+int hmacmd5Reset (hmacmd5Param*);
BEECRYPTAPI
-int hmacmd5Update(hmacmd5Param* sp, const byte* data, size_t size)
- /*@globals md5 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_md5_m
- */
-/*@-exportlocal@*/
+int hmacmd5Update(hmacmd5Param*, const byte*, size_t);
BEECRYPTAPI
-int hmacmd5Digest(hmacmd5Param* sp, byte* data)
- /*@globals md5 @*/
- /*@modifies sp, data @*/;
-/*@=exportlocal@*/
+int hmacmd5Digest(hmacmd5Param*, byte*);
#ifdef __cplusplus
}
* \ingroup HMAC_m HMAC_sha1_m
*/
-#include "system.h"
-#include "hmacsha1.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/hmacsha1.h"
/*!\addtogroup HMAC_sha1_m
* \{
*/
-/*@-sizeoftype@*/
const keyedHashFunction hmacsha1 = {
"HMAC-SHA-1",
sizeof(hmacsha1Param),
- 64U,
- 5U * sizeof(uint32_t),
- 64U,
- 512U,
- 32U,
+ 64,
+ 20,
+ 64,
+ 512,
+ 32,
(keyedHashFunctionSetup) hmacsha1Setup,
(keyedHashFunctionReset) hmacsha1Reset,
(keyedHashFunctionUpdate) hmacsha1Update,
(keyedHashFunctionDigest) hmacsha1Digest
};
-/*@=sizeoftype@*/
-/*@-type@*/ /* fix: cast to (hashFunctionParam*) */
int hmacsha1Setup (hmacsha1Param* sp, const byte* key, size_t keybits)
{
return hmacSetup(sp->kxi, sp->kxo, &sha1, &sp->sparam, key, keybits);
{
return hmacDigest(sp->kxo, &sha1, &sp->sparam, data);
}
-/*@=type@*/
/*!\}
*/
#ifndef _HMACSHA1_H
#define _HMACSHA1_H
-#include "hmac.h"
-#include "sha1.h"
+#include "beecrypt/hmac.h"
+#include "beecrypt/sha1.h"
/*!\ingroup HMAC_sha1_m
*/
extern "C" {
#endif
-/** \ingroup HMAC_sha1_m
- */
-/*@observer@*/ /*@unchecked@*/
extern BEECRYPTAPI const keyedHashFunction hmacsha1;
-/** \ingroup HMAC_sha1_m
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-int hmacsha1Setup (hmacsha1Param* sp, const byte* key, size_t keybits)
- /*@globals sha1 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_sha1_m
- */
-/*@-exportlocal@*/
+int hmacsha1Setup (hmacsha1Param*, const byte*, size_t);
BEECRYPTAPI
-int hmacsha1Reset (hmacsha1Param* sp)
- /*@globals sha1 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_sha1_m
- */
-/*@-exportlocal@*/
+int hmacsha1Reset (hmacsha1Param*);
BEECRYPTAPI
-int hmacsha1Update(hmacsha1Param* sp, const byte* data, size_t size)
- /*@globals sha1 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_sha1_m
- */
-/*@-exportlocal@*/
+int hmacsha1Update(hmacsha1Param*, const byte*, size_t);
BEECRYPTAPI
-int hmacsha1Digest(hmacsha1Param* sp, byte* data)
- /*@globals sha1 @*/
- /*@modifies sp, data @*/;
-/*@=exportlocal@*/
+int hmacsha1Digest(hmacsha1Param*, byte*);
#ifdef __cplusplus
}
* \ingroup HMAC_m HMAC_sha256_m
*/
-#include "system.h"
-#include "hmacsha256.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/hmacsha256.h"
/*!\addtogroup HMAC_sha256_m
* \{
*/
-/*@-sizeoftype@*/
const keyedHashFunction hmacsha256 = {
"HMAC-SHA-256",
sizeof(hmacsha256Param),
- 64U,
- 8U * sizeof(uint32_t),
- 64U,
- 512U,
- 32U,
+ 64,
+ 32,
+ 64,
+ 512,
+ 32,
(keyedHashFunctionSetup) hmacsha256Setup,
(keyedHashFunctionReset) hmacsha256Reset,
(keyedHashFunctionUpdate) hmacsha256Update,
(keyedHashFunctionDigest) hmacsha256Digest
};
-/*@=sizeoftype@*/
-/*@-type@*/ /* fix: cast to (hashFunctionParam*) */
int hmacsha256Setup (hmacsha256Param* sp, const byte* key, size_t keybits)
{
return hmacSetup(sp->kxi, sp->kxo, &sha256, &sp->sparam, key, keybits);
{
return hmacDigest(sp->kxo, &sha256, &sp->sparam, data);
}
-/*@=type@*/
/*!\}
*/
#ifndef _HMACSHA256_H
#define _HMACSHA256_H
-#include "hmac.h"
-#include "sha256.h"
+#include "beecrypt/hmac.h"
+#include "beecrypt/sha256.h"
/*!\ingroup HMAC_sha256_m
*/
extern "C" {
#endif
-/** \ingroup HMAC_sha256_m
- */
-/*@observer@*/ /*@checked@*/
extern BEECRYPTAPI const keyedHashFunction hmacsha256;
-/** \ingroup HMAC_sha256_m
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-int hmacsha256Setup (hmacsha256Param* sp, const byte* key, size_t keybits)
- /*@globals sha256 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_sha256_m
- */
-/*@-exportlocal@*/
+int hmacsha256Setup (hmacsha256Param*, const byte*, size_t);
BEECRYPTAPI
-int hmacsha256Reset (hmacsha256Param* sp)
- /*@globals sha256 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_sha256_m
- */
-/*@-exportlocal@*/
+int hmacsha256Reset (hmacsha256Param*);
BEECRYPTAPI
-int hmacsha256Update(hmacsha256Param* sp, const byte* data, size_t size)
- /*@globals sha256 @*/
- /*@modifies sp @*/;
-/*@=exportlocal@*/
-
-/** \ingroup HMAC_sha256_m
- */
-/*@-exportlocal@*/
+int hmacsha256Update(hmacsha256Param*, const byte*, size_t);
BEECRYPTAPI
-int hmacsha256Digest(hmacsha256Param* sp, byte* data)
- /*@globals sha256 @*/
- /*@modifies sp, data @*/;
-/*@=exportlocal@*/
+int hmacsha256Digest(hmacsha256Param*, byte*);
#ifdef __cplusplus
}
+++ /dev/null
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
-LIBBEECRYPT_LT_CURRENT = 6
-LIBBEECRYPT_LT_AGE = 0
-LIBBEECRYPT_LT_REVISION = 0
-
AUTOMAKE_OPTIONS = gnu no-dependencies
-BEECRYPT_JAVA_OBJECTS = javaglue.lo
+LIBBEECRYPT_JAVA_LT_CURRENT = 8
+LIBBEECRYPT_JAVA_LT_AGE = 2
+LIBBEECRYPT_JAVA_LT_REVISION = 0
-lib_LTLIBRARIES = libbeecrypt_java.la
+INCLUDES = -I$(top_srcdir)/.. @JAVAINC@
-noinst_HEADERS = javaglue.h
+libaltdir=$(prefix)/lib@LIBALT@
-libbeecrypt_java_la_SOURCES = javaglue.c
+libalt_LTLIBRARIES = libbeecrypt_java.la
-libbeecrypt_java_la_DEPENDENCIES = $(BEECRYPT_JAVA_OBJECTS)
+noinst_HEADERS = javaglue.h
-libbeecrypt_java_la_LDFLAGS = -no-undefined -version-info $(LIBBEECRYPT_LT_CURRENT):$(LIBBEECRYPT_LT_REVISION):$(LIBBEECRYPT_LT_AGE)
+libbeecrypt_java_la_SOURCES = javaglue.c
+libbeecrypt_java_la_LIBADD = $(top_builddir)/libbeecrypt.la
+libbeecrypt_java_la_LDFLAGS = -no-undefined -version $(LIBBEECRYPT_JAVA_LT_CURRENT):$(LIBBEECRYPT_JAVA_LT_REVISION):$(LIBBEECRYPT_JAVA_LT_AGE)
# include "config.h"
#endif
-#include "beecrypt.h"
-#include "blockmode.h"
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/blockmode.h"
+#include "beecrypt/mpnumber.h"
+#include "beecrypt/mpbarrett.h"
#if JAVAGLUE
#include "javaglue.h"
-#ifndef WORDS_BIGENDIAN
-# define WORDS_BIGENDIAN 0
-#endif
-
static const char* JAVA_OUT_OF_MEMORY_ERROR = "java/lang/OutOfMemoryError";
static const char* JAVA_PROVIDER_EXCEPTION = "java/security/ProviderException";
static const char* JAVA_INVALID_KEY_EXCEPTION = "java/security/InvalidKeyException";
static const char* MSG_NO_ENTROPY_SOURCE = "no entropy source";
static const char* MSG_INVALID_KEY = "invalid key";
+/* Utility functions */
+
+static void jba_to_mpnumber(JNIEnv* env, jbyteArray input, mpnumber* n)
+{
+ jbyte* data = (*env)->GetByteArrayElements(env, input, (jboolean*) 0);
+ if (data == (jbyte*) 0)
+ {
+ jclass ex = (*env)->FindClass(env, JAVA_OUT_OF_MEMORY_ERROR);
+ if (ex)
+ (*env)->ThrowNew(env, ex, MSG_OUT_OF_MEMORY);
+ }
+ else
+ {
+ jsize len = (*env)->GetArrayLength(env, input);
+ size_t size = MP_BYTES_TO_WORDS(len + MP_WBYTES - 1);
+
+ mpnsetbin(n, data, len);
+ }
+ (*env)->ReleaseByteArrayElements(env, input, data, JNI_ABORT);
+}
+
+static void jba_to_mpbarrett(JNIEnv* env, jbyteArray input, mpbarrett* b)
+{
+ jbyte* data = (*env)->GetByteArrayElements(env, input, (jboolean*) 0);
+ if (data == (jbyte*) 0)
+ {
+ jclass ex = (*env)->FindClass(env, JAVA_OUT_OF_MEMORY_ERROR);
+ if (ex)
+ (*env)->ThrowNew(env, ex, MSG_OUT_OF_MEMORY);
+ }
+ else
+ {
+ jsize len = (*env)->GetArrayLength(env, input);
+ size_t size = MP_BYTES_TO_WORDS(len + MP_WBYTES - 1);
+
+ mpbsetbin(b, data, len);
+ }
+ (*env)->ReleaseByteArrayElements(env, input, data, JNI_ABORT);
+}
+
/* NativeMessageDigest */
jlong JNICALL Java_beecrypt_security_NativeMessageDigest_find(JNIEnv* env, jclass dummy, jstring algorithm)
jbyte* digest;
int digestsize = (jsize) ((const hashFunction*) hash)->digestsize;
- int digestwords = digestsize >> 2;
digestArray = (*env)->NewByteArray(env, digestsize);
digest = (*env)->GetByteArrayElements(env, digestArray, (jboolean*) 0);
+++ /dev/null
-.deps
-.depend
-.depend-done
-.libs
-Makefile
-Makefile.in
-config.cache
-config.guess
-config.log
-config.status
-config.sub
-configure
-libtool
-ltconfig
-ltmain.sh
-*.o
-*.lo
-stamp-h
-stamp-h.in
* \ingroup HASH_m HASH_md5_m
*/
-#include "system.h"
-#include "md5.h"
-#include "mp.h"
-#include "endianness.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/md5.h"
+#include "beecrypt/endianness.h"
/*!\addtogroup HASH_md5_m
* \{
*/
-/*@observer@*/ /*@unchecked@*/
-static uint32_t md5hinit[4] = { 0x67452301U, 0xefcdab89U, 0x98badcfeU, 0x10325476U };
+static uint32_t md5hinit[4] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 };
-/*@-sizeoftype@*/
const hashFunction md5 = {
"MD5",
sizeof(md5Param),
- 64U,
- 16U,
+ 64,
+ 16,
(hashFunctionReset) md5Reset,
(hashFunctionUpdate) md5Update,
(hashFunctionDigest) md5Digest
};
-/*@=sizeoftype@*/
int md5Reset(register md5Param* mp)
{
- memcpy(mp->h, md5hinit, sizeof(mp->h));
- memset(mp->data, 0, sizeof(mp->data));
+ memcpy(mp->h, md5hinit, 4 * sizeof(uint32_t));
+ memset(mp->data, 0, 16 * sizeof(uint32_t));
#if (MP_WBITS == 64)
mpzero(1, mp->length);
#elif (MP_WBITS == 32)
mpw add[1];
mpsetw(1, add, size);
mplshift(1, add, 3);
- (void) mpadd(1, mp->length, add);
+ mpadd(1, mp->length, add);
#elif (MP_WBITS == 32)
mpw add[2];
mpsetw(2, add, size);
mplshift(2, add, 3);
- (void) mpadd(2, mp->length, add);
+ mpadd(2, mp->length, add);
#else
# error
#endif
-/*@-type@*/
while (size > 0)
{
proclength = ((mp->offset + size) > 64U) ? (64U - mp->offset) : size;
- memmove(((byte *) mp->data) + mp->offset, data, proclength);
+ memcpy(((byte *) mp->data) + mp->offset, data, proclength);
size -= proclength;
data += proclength;
mp->offset += proclength;
mp->offset = 0;
}
}
-/*@=type@*/
return 0;
}
-/**
- */
static void md5Finish(md5Param* mp)
- /*@modifies mp @*/
{
register byte *ptr = ((byte *) mp->data) + mp->offset++;
*(ptr++) = 0x80;
-/*@-type@*/
if (mp->offset > 56)
{
while (mp->offset++ < 64)
ptr = ((byte *) mp->data) + mp->offset;
while (mp->offset++ < 56)
*(ptr++) = 0;
-/*@=type@*/
#if (MP_WBITS == 64)
ptr[0] = (byte)(mp->length[0] );
mp->offset = 0;
}
-int md5Digest(md5Param* mp, byte* digest)
+int md5Digest(md5Param* mp, byte* data)
{
md5Finish(mp);
/* encode 4 integers little-endian style */
- digest[ 0] = (byte)(mp->h[0] );
- digest[ 1] = (byte)(mp->h[0] >> 8);
- digest[ 2] = (byte)(mp->h[0] >> 16);
- digest[ 3] = (byte)(mp->h[0] >> 24);
- digest[ 4] = (byte)(mp->h[1] );
- digest[ 5] = (byte)(mp->h[1] >> 8);
- digest[ 6] = (byte)(mp->h[1] >> 16);
- digest[ 7] = (byte)(mp->h[1] >> 24);
- digest[ 8] = (byte)(mp->h[2] );
- digest[ 9] = (byte)(mp->h[2] >> 8);
- digest[10] = (byte)(mp->h[2] >> 16);
- digest[11] = (byte)(mp->h[2] >> 24);
- digest[12] = (byte)(mp->h[3] );
- digest[13] = (byte)(mp->h[3] >> 8);
- digest[14] = (byte)(mp->h[3] >> 16);
- digest[15] = (byte)(mp->h[3] >> 24);
-
- (void) md5Reset(mp);
+ data[ 0] = (byte)(mp->h[0] );
+ data[ 1] = (byte)(mp->h[0] >> 8);
+ data[ 2] = (byte)(mp->h[0] >> 16);
+ data[ 3] = (byte)(mp->h[0] >> 24);
+ data[ 4] = (byte)(mp->h[1] );
+ data[ 5] = (byte)(mp->h[1] >> 8);
+ data[ 6] = (byte)(mp->h[1] >> 16);
+ data[ 7] = (byte)(mp->h[1] >> 24);
+ data[ 8] = (byte)(mp->h[2] );
+ data[ 9] = (byte)(mp->h[2] >> 8);
+ data[10] = (byte)(mp->h[2] >> 16);
+ data[11] = (byte)(mp->h[2] >> 24);
+ data[12] = (byte)(mp->h[3] );
+ data[13] = (byte)(mp->h[3] >> 8);
+ data[14] = (byte)(mp->h[3] >> 16);
+ data[15] = (byte)(mp->h[3] >> 24);
+
+ md5Reset(mp);
return 0;
}
/*!\file md5.h
* \brief MD5 hash function.
* \author Bob Deblier <bob.deblier@pandora.be>
- * \ingroup HASH_m HASH_md5_m
+ * \ingroup HASH_m HASH_md5_m
*/
#ifndef _MD5_H
#define _MD5_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
-/*!\ingroup HASH_md5_m
+/*!\brief Holds all the parameters necessary for the MD5 algorithm.
+ * \ingroup HASH_md5_h
*/
typedef struct
{
+ /*!\var h
+ */
uint32_t h[4];
+ /*!\var data
+ */
uint32_t data[16];
+ /*!\var length
+ * \brief Multi-precision integer counter for the bits that have been
+ * processed so far.
+ */
#if (MP_WBITS == 64)
mpw length[1];
#elif (MP_WBITS == 32)
#else
# error
#endif
+ /*!\var offset
+ * \brief Offset into \a data; points to the place where new data will be
+ * copied before it is processed.
+ */
uint32_t offset;
} md5Param;
extern "C" {
#endif
-/** \ingroup HASH_md5_m
- * Holds the full API description of the MD5 algorithm.
+/*!\var sha1
+ * \brief Holds the full API description of the MD5 algorithm.
*/
-/*@observer@*/ /*@checked@*/
extern BEECRYPTAPI const hashFunction md5;
-/** \ingroup HASH_md5_m
- * This function performs the MD5 hash algorithm on 64 byte blocks of data.
- * @param mp hash parameter block
+/*!\fn int md5Reset(md5Param* mp)
+ * \brief This function resets the parameter block so that it's ready for a
+ * new hash.
+ * \param mp The hash function's parameter block.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-void md5Process(md5Param* mp)
- /*@modifies mp @*/;
-/*@=exportlocal@*/
+void md5Process(md5Param* mp);
-/** \ingroup HASH_md5_m
- * This function resets the parameter block so that it's ready for a new hash.
- * @param mp hash parameter block
- * @return 0 on success
+/*!\fn int md5Reset(md5Param* mp)
+ * \brief This function resets the parameter block so that it's ready for a
+ * new hash.
+ * \param mp The hash function's parameter block.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int md5Reset (md5Param* mp)
- /*@modifies mp @*/;
-/*@=exportlocal@*/
+int md5Reset (md5Param* mp);
-/** \ingroup HASH_md5_m
- * This function should be used to pass successive blocks of data to be hashed.
- * @param mp hash parameter block
- * @param *data bytes to hash
- * @param size no. of bytes to hash
- * @return 0 on success
+/*!\fn int md5Update(md5Param* mp, const byte* data, size_t size)
+ * \brief This function should be used to pass successive blocks of data
+ * to be hashed.
+ * \param mp The hash function's parameter block.
+ * \param data
+ * \param size
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int md5Update (md5Param* mp, const byte* data, size_t size)
- /*@modifies mp @*/;
-/*@=exportlocal@*/
+int md5Update (md5Param* mp, const byte* data, size_t size);
-/** \ingroup HASH_md5_m
- * This function finishes the current hash computation, returning the digest
- * value in \a digest.
- * @param mp hash parameter block
- * @retval *digest 16 byte MD5 digest
- * @return 0 on success
+/*!\fn int md5Digest(md5Param* mp, byte* digest)
+ * \brief This function finishes the current hash computation and copies
+ * the digest value into \a digest.
+ * \param mp The hash function's parameter block.
+ * \param digest The place to store the 16-byte digest.
+ * \retval 0 on success.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int md5Digest (md5Param* mp, /*@out@*/ byte* digest)
- /*@modifies mp, digest @*/;
-/*@=exportlocal@*/
+int md5Digest (md5Param* mp, byte* digest);
#ifdef __cplusplus
}
/*
- * memchunk.c
- *
* Copyright (c) 2001 Virtual Unlimited B.V.
*
* This library is free software; you can redistribute it and/or
* \author Bob Deblier <bob.deblier@pandora.be>
*/
-#include "system.h"
-#include "memchunk.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/memchunk.h"
-/*@-compdef@*/ /* tmp->data is undefined */
memchunk* memchunkAlloc(size_t size)
{
- memchunk* tmp = (memchunk*) calloc(1, sizeof(*tmp));
+ memchunk* tmp = (memchunk*) calloc(1, sizeof(memchunk));
if (tmp)
{
tmp->size = size;
- /*@-mustfree@*/ /* tmp->data is OK */
tmp->data = (byte*) malloc(size);
- /*@=mustfree@*/
if (tmp->data == (byte*) 0)
{
return tmp;
}
-/*@=compdef@*/
+
+void memchunkInit(memchunk* m)
+{
+ m->data = (byte*) 0;
+ m->size = 0;
+}
+
+void memchunkWipe(memchunk* m)
+{
+ if (m)
+ {
+ if (m->data)
+ {
+ memset(m->data, 0, m->size);
+ }
+ }
+}
void memchunkFree(memchunk* m)
{
memchunk* memchunkResize(memchunk* m, size_t size)
{
- /*@-branchstate@*/
if (m)
{
if (m->data)
m = (memchunk*) 0;
}
else
- /*@-nullderef@*/
m->size = size;
- /*@=nullderef@*/
}
- /*@=branchstate@*/
- /*@-nullret -compdef @*/ /* LCL: m->data might be NULL */
return m;
- /*@=nullret =compdef@*/
}
memchunk* memchunkClone(const memchunk* m)
#ifndef _MEMCHUNK_H
#define _MEMCHUNK_H
-#include "beecrypt.api.h"
+#include "beecrypt/api.h"
typedef struct
{
size_t size;
-/*@only@*/
byte* data;
} memchunk;
extern "C" {
#endif
-/**
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/
-memchunk* memchunkAlloc(size_t size)
- /*@*/;
-
-/**
- */
BEECRYPTAPI
-/*@unused@*/ void memchunkFree(/*@only@*/ /*@null@*/memchunk* m)
- /*@*/;
-
-/**
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/
-memchunk* memchunkResize(/*@only@*/ /*@null@*/memchunk* m, size_t size)
- /*@*/;
-
-/**
- */
-BEECRYPTAPI /*@only@*/ /*@null@*/ /*@unused@*/
-memchunk* memchunkClone(const memchunk* m);
+memchunk* memchunkAlloc(size_t);
+BEECRYPTAPI
+void memchunkWipe(memchunk*);
+BEECRYPTAPI
+void memchunkFree(memchunk*);
+BEECRYPTAPI
+memchunk* memchunkResize(memchunk*, size_t);
+BEECRYPTAPI
+memchunk* memchunkClone(const memchunk*);
#ifdef __cplusplus
}
* \ingroup MP_m
*/
-#include "system.h"
-#include "beecrypt.h"
-#include "mpopt.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/mp.h"
+#include "beecrypt/mpopt.h"
#ifndef ASM_MPZERO
void mpzero(size_t size, mpw* data)
if (xsize > ysize)
{
register size_t diff = xsize - ysize;
- return mpz(diff, xdata) && mple(ysize, xdata+diff, ydata);
+ return mpz(diff, xdata) && mple(ysize, xdata+ diff, ydata);
}
else if (xsize < ysize)
{
}
#endif
-
#ifndef ASM_MPISONE
int mpisone(size_t size, const mpw* data)
{
#endif
#ifndef ASM_MPMSBSET
-int mpmsbset(/*@unused@*/ size_t size, const mpw* data)
+int mpmsbset(size_t size, const mpw* data)
{
return (int)((*data) >> (MP_WBITS-1));
}
#endif
#ifndef ASM_MPSETMSB
-void mpsetmsb(/*@unused@*/ size_t size, mpw* data)
+void mpsetmsb(size_t size, mpw* data)
{
*data |= MP_MSBMASK;
}
#endif
#ifndef ASM_MPCLRMSB
-void mpclrmsb(/*@unused@*/ size_t size, mpw* data)
+void mpclrmsb(size_t size, mpw* data)
{
*data &= ~ MP_MSBMASK;
}
load = *xdata;
temp = load + 1;
*(xdata--) = temp;
- carry = (load > temp);
+ carry = (load > temp);
}
return carry;
}
if (xsize > ysize)
{
register size_t diff = xsize - ysize;
-/*@-evalorder@*/
return mpaddw(diff, xdata, (mpw) mpadd(ysize, xdata+diff, ydata));
-/*@=evalorder@*/
}
else
{
if (xsize > ysize)
{
register size_t diff = xsize - ysize;
-/*@-evalorder@*/
return mpsubw(diff, xdata, (mpw) mpsub(ysize, xdata+diff, ydata));
-/*@=evalorder@*/
}
else
{
void mpneg(size_t size, mpw* data)
{
mpnot(size, data);
- (void) mpaddw(size, data, 1);
+ mpaddw(size, data, 1);
}
#endif
*(--result) = 0;
- (void) mpmultwo(size << 1, result);
+ mpmultwo(size << 1, result);
- (void) mpaddsqrtrc(size, result, data);
+ mpaddsqrtrc(size, result, data);
}
#endif
if (words < size)
{
- register unsigned short lbits = (unsigned short) (count & (MP_WBITS-1));
+ register short lbits = (short) (count & (MP_WBITS-1));
/* first do the shifting, then do the moving */
- if (lbits != 0)
+ if (lbits)
{
register mpw temp, carry = 0;
- register unsigned int rbits = MP_WBITS - lbits;
+ register short rbits = MP_WBITS - lbits;
register size_t i = size;
while (i > words)
if (words < size)
{
- register unsigned short rbits = (unsigned short) (count & (MP_WBITS-1));
+ register short rbits = (short) (count & (MP_WBITS-1));
/* first do the shifting, then do the moving */
- if (rbits != 0)
+ if (rbits)
{
register mpw temp, carry = 0;
- register unsigned int lbits = MP_WBITS - rbits;
+ register short lbits = MP_WBITS - rbits;
register size_t i = 0;
while (i < size-words)
{
register mpw* slide = data+size-1;
register size_t zwords = 0; /* counter for 'all zero bit' words */
- register unsigned int lbits, rbits = 0; /* counter for 'least significant zero' bits */
+ register short lbits, rbits = 0; /* counter for 'least significant zero' bits */
register mpw temp, carry = 0;
data = slide;
if ((rbits == 0) && (zwords == 0))
return 0;
- /* shouldn't happen, but let's test anyway */
- if (size == 0)
- return 0;
-
/* prepare right-shifting of data */
lbits = MP_WBITS - rbits;
/* try an alternate version here, with descending sizes */
/* also integrate lszcnt and rshift properly into one function */
#ifndef ASM_MPGCD_W
-/**
+/*
* mpgcd_w
* need workspace of (size) words
*/
void mpgcd_w(size_t size, const mpw* xdata, const mpw* ydata, mpw* result, mpw* wksp)
{
- register size_t shift = 0, temp;
+ register size_t shift, temp;
if (mpge(size, xdata, ydata))
{
while (mpnz(size, wksp))
{
- (void) mprshiftlsz(size, wksp);
- (void) mprshiftlsz(size, result);
+ mprshiftlsz(size, wksp);
+ mprshiftlsz(size, result);
if (mpge(size, wksp, result))
- (void) mpsub(size, wksp, result);
+ mpsub(size, wksp, result);
else
- (void) mpsub(size, result, wksp);
+ mpsub(size, result, wksp);
/* slide past zero words in both operands by increasing pointers and decreasing size */
if ((*wksp == 0) && (*result == 0))
#ifndef ASM_MPEXTGCD_W
/* needs workspace of (6*size+6) words */
/* used to compute the modular inverse */
-int mpextgcd_w(size_t size, const mpw* xdata, const mpw* ndata, mpw* result, mpw* wksp)
+int mpextgcd_w(size_t size, const mpw* xdata, const mpw* ydata, mpw* result, mpw* wksp)
{
/*
- * For computing a modular inverse, pass the modulus as ndata and the number
- * to be inverted as xdata.
+ * For computing a modular inverse, pass the modulus as xdata and the number
+ * to be inverted as ydata.
*
* Fact: if a element of Zn, then a is invertible if and only if gcd(a,n) = 1
- * Hence: if ndata is even, then x must be odd, otherwise the gcd(x,n) >= 2
+ * Hence: if n is even, then a must be odd, otherwise the gcd(a,n) >= 2
*
* The calling routine must guarantee this condition.
*/
mpw* cdata = bdata+sizep;
mpw* ddata = cdata+sizep;
- mpsetx(sizep, udata, size, ndata);
- mpsetx(sizep, vdata, size, xdata);
+ mpsetx(sizep, udata, size, xdata);
+ mpsetx(sizep, vdata, size, ydata);
mpzero(sizep, bdata);
mpsetw(sizep, ddata, 1);
if (mpodd(sizep, bdata) || (full && mpodd(sizep, adata)))
{
- if (full) (void) mpaddx(sizep, adata, size, xdata);
- (void) mpsubx(sizep, bdata, size, ndata);
+ if (full) mpaddx(sizep, adata, size, ydata);
+ mpsubx(sizep, bdata, size, xdata);
}
if (full) mpsdivtwo(sizep, adata);
if (mpodd(sizep, ddata) || (full && mpodd(sizep, cdata)))
{
- if (full) (void) mpaddx(sizep, cdata, size, xdata);
- (void) mpsubx(sizep, ddata, size, ndata);
+ if (full) mpaddx(sizep, cdata, size, ydata);
+ mpsubx(sizep, ddata, size, xdata);
}
if (full) mpsdivtwo(sizep, cdata);
}
if (mpge(sizep, udata, vdata))
{
- (void) mpsub(sizep, udata, vdata);
- if (full) (void) mpsub(sizep, adata, cdata);
- (void) mpsub(sizep, bdata, ddata);
+ mpsub(sizep, udata, vdata);
+ if (full) mpsub(sizep, adata, cdata);
+ mpsub(sizep, bdata, ddata);
}
else
{
- (void) mpsub(sizep, vdata, udata);
- if (full) (void) mpsub(sizep, cdata, adata);
- (void) mpsub(sizep, ddata, bdata);
+ mpsub(sizep, vdata, udata);
+ if (full) mpsub(sizep, cdata, adata);
+ mpsub(sizep, ddata, bdata);
}
if (mpz(sizep, udata))
{
{
if (result)
{
- mpsetx(size, result, sizep, ddata);
if (*ddata & MP_MSBMASK)
{
/* keep adding the modulus until we get a carry */
- while (!mpadd(size, result, ndata))
- {};
+ while (!mpaddx(sizep, ddata, size, xdata));
}
+ else
+ {
+ /* in some computations, d ends up > x, hence:
+ * keep subtracting n from d until d < x
+ */
+ while (mpgtx(sizep, ddata, size, xdata))
+ mpsubx(sizep, ddata, size, xdata);
+ }
+ mpsetx(size, result, sizep, ddata);
}
return 1;
}
mpw mppndiv(mpw xhi, mpw xlo, mpw y)
{
register mpw result = 0;
- register unsigned int count = MP_WBITS;
- register unsigned int carry = 0;
+ register short count = MP_WBITS;
+ register int carry = 0;
while (count--)
{
- if (((unsigned)carry) | (unsigned)(xhi >= y))
+ if (carry | (xhi >= y))
{
xhi -= y;
result++;
xlo <<= 1;
result <<= 1;
}
- if (((unsigned)carry) | (unsigned)(xhi >= y))
+ if (carry | (xhi >= y))
{
xhi -= y;
result++;
msw = *ynorm;
mpcopy(xsize, rdata, xdata);
if (mpge(ysize, rdata, ynorm))
- (void) mpsub(ysize, rdata, ynorm);
+ mpsub(ysize, rdata, ynorm);
while (qsize--)
{
q = mppndiv(rdata[0], rdata[1], msw);
-/*@-evalorder@*/
*workspace = mpsetmul(ysize, workspace+1, ynorm, q);
-/*@=evalorder@*/
while (mplt(ysize+1, rdata, workspace))
{
- (void) mpsubx(ysize+1, workspace, ysize, ynorm);
+ mpsubx(ysize+1, workspace, ysize, ynorm);
q--;
}
- (void) mpsub(ysize+1, rdata, workspace);
+ mpsub(ysize+1, rdata, workspace);
rdata++;
}
/* de-normalization steps */
{
mpdivtwo(ysize, ynorm);
if (mpge(ysize, rdata, ynorm))
- (void) mpsub(ysize, rdata, ynorm);
+ mpsub(ysize, rdata, ynorm);
}
}
#endif
#ifndef ASM_MPNDIVMOD
-void mpndivmod(mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, mpw* workspace)
+void mpndivmod(mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, register mpw* workspace)
{
/* result must be xsize+1 in length */
/* workspace must be ysize+1 in length */
{
q = mppndiv(result[0], result[1], msw);
-/*@-evalorder@*/
*workspace = mpsetmul(ysize, workspace+1, ydata, q);
-/*@=evalorder@*/
while (mplt(ysize+1, result, workspace))
{
- (void) mpsubx(ysize+1, workspace, ysize, ydata);
+ mpsubx(ysize+1, workspace, ysize, ydata);
q--;
}
- (void) mpsub(ysize+1, result, workspace);
+ mpsub(ysize+1, result, workspace);
*(result++) = q;
}
}
mpfprintln(stdout, size, data);
}
-void mpfprint(FILE * f, size_t size, const mpw* data)
+void mpfprint(FILE* f, size_t size, const mpw* data)
{
if (data == (mpw*) 0)
- return;
+ return;
+
if (f == (FILE*) 0)
- f = stderr;
+ return;
while (size--)
{
# error
#endif
}
- (void) fflush(f);
+ fflush(f);
}
-void mpfprintln(FILE * f, size_t size, const mpw* data)
+void mpfprintln(FILE* f, size_t size, const mpw* data)
{
if (data == (mpw*) 0)
- return;
+ return;
+
if (f == (FILE*) 0)
- f = stderr;
+ return;
while (size--)
{
#if (MP_WBITS == 32)
- fprintf(f, "%08x", (unsigned) *(data++));
+ fprintf(f, "%08x", *(data++));
#elif (MP_WBITS == 64)
# if WIN32
fprintf(f, "%016I64x", *(data++));
#endif
}
fprintf(f, "\n");
- (void) fflush(f);
+ fflush(f);
}
int i2osp(byte *osdata, size_t ossize, const mpw* idata, size_t isize)
{
- size_t required = MP_WORDS_TO_BYTES(isize);
+ #if WORDS_BIGENDIAN
+ size_t max_bytes = MP_WORDS_TO_BYTES(isize);
+ #endif
+ size_t significant_bytes = (mpbits(isize, idata) + 7) >> 3;
- /* check if size is large enough */
- if (ossize >= required)
+ /* verify that ossize is large enough to contain the significant bytes */
+ if (ossize >= significant_bytes)
{
- /* yes, we can proceed */
- if (ossize > required)
- { /* fill initial bytes with zero */
- memset(osdata, 0, ossize-required);
- osdata += ossize-required;
+ /* looking good; check if we have more space than significant bytes */
+ if (ossize > significant_bytes)
+ { /* fill most significant bytes with zero */
+ memset(osdata, 0, ossize - significant_bytes);
+ osdata += ossize - significant_bytes;
}
- if (required)
+ if (significant_bytes)
{ /* fill remaining bytes with endian-adjusted data */
#if !WORDS_BIGENDIAN
- while (required)
- {
- mpw w = *(idata++);
- byte shift = MP_WBITS;
+ mpw w = idata[--isize];
+ byte shift = 0;
- while (shift != 0)
+ /* fill right-to-left; much easier than left-to-right */
+ do
+ {
+ osdata[--significant_bytes] = (byte)(w >> shift);
+ shift += 8;
+ if (shift == MP_WBITS)
{
- shift -= 8;
- *(osdata++) = (byte)(w >> shift);
+ shift = 0;
+ w = idata[--isize];
}
- required -= MP_WBYTES;
- }
+ } while (significant_bytes);
#else
- memcpy(osdata, idata, required);
+ /* just copy data past zero bytes */
+ memcpy(osdata, ((byte*) idata) + (max_bytes - significant_bytes), significant_bytes);
#endif
}
return 0;
return -1;
}
-int os2ip(mpw* idata, size_t isize, const byte* osdata, /*@unused@*/ size_t ossize)
+int os2ip(mpw* idata, size_t isize, const byte* osdata, size_t ossize)
{
- size_t required = MP_BYTES_TO_WORDS(isize + MP_WBYTES - 1);
+ size_t required;
+
+ /* skip non-significant leading zero bytes */
+ while (!(*osdata) && ossize)
+ {
+ osdata++;
+ ossize--;
+ }
+
+ required = MP_BYTES_TO_WORDS(ossize + MP_WBYTES - 1);
if (isize >= required)
{
- /* yes, we can proceed */
+ /* yes, we have enough space and can proceed */
+ mpw w = 0;
+ /* adjust counter so that the loop will start by skipping the proper
+ * amount of leading bytes in the first significant word
+ */
+ byte b = (ossize % MP_WBYTES);
+
if (isize > required)
{ /* fill initials words with zero */
mpzero(isize-required, idata);
idata += isize-required;
}
- if (required)
- { /* fill remaining words with endian-adjusted data */
- #if !WORDS_BIGENDIAN
- while (required)
- {
- mpw w = 0;
- byte b = MP_WBYTES;
- while (b--)
- {
- w <<= 8;
- w |= *(osdata++);
- }
+ if (b == 0)
+ b = MP_WBYTES;
+
+ while (ossize--)
+ {
+ w <<= 8;
+ w |= *(osdata++);
+ b--;
+
+ if (b == 0)
+ {
*(idata++) = w;
- required--;
+ w = 0;
+ b = MP_WBYTES;
}
- #else
- memcpy(idata, osdata, MP_WORDS_TO_BYTES(required));
- #endif
}
+
return 0;
}
return -1;
#ifndef _MP_H
#define _MP_H
-#include "beecrypt.api.h"
-#include "mpopt.h"
+#include "beecrypt/api.h"
+#include "beecrypt/mpopt.h"
#define MP_HWBITS (MP_WBITS >> 1)
#define MP_WBYTES (MP_WBITS >> 3)
extern "C" {
#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpcopy(size_t size, /*@out@*/ mpw* dst, const mpw* src)
- /*@modifies dst @*/;
#ifndef ASM_MPCOPY
-# define mpcopy(size, dst, src) \
- /*@-aliasunique -mayaliasunique @*/ \
- memcpy(dst, src, MP_WORDS_TO_BYTES((unsigned)size)) \
- /*@=aliasunique =mayaliasunique @*/
+# define mpcopy(size, dst, src) memcpy(dst, src, MP_WORDS_TO_BYTES(size))
+#else
+BEECRYPTAPI
+void mpcopy(size_t size, mpw* dest, const mpw* src);
#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpmove(size_t size, /*@out@*/ mpw* dst, const mpw* src)
- /*@modifies dst @*/;
#ifndef ASM_MPMOVE
-# define mpmove(size, dst, src) memmove(dst, src, MP_WORDS_TO_BYTES((unsigned)size))
+# define mpmove(size, dst, src) memmove(dst, src, MP_WORDS_TO_BYTES(size))
+#else
+BEECRYPTAPI
+void mpmove(size_t size, mpw* dest, const mpw* src);
#endif
-/**
- * This function zeroes a multi-precision integer of a given size.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
+/*!\fn void mpzero(size_t size, mpw* data)
+ * \brief This function zeroes a multi-precision integer of a given size.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
BEECRYPTAPI
-void mpzero(size_t size, /*@out@*/ mpw* data)
- /*@modifies data @*/;
+void mpzero(size_t size, mpw* data);
-/**
- * This function fills each word of a multi-precision integer with a
+/*!\fn void mpfill(size_t size, mpw* data, mpw fill)
+ * \brief This function fills each word of a multi-precision integer with a
* given value.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @param fill The value fill the data with.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \param fill The value fill the data with.
*/
-BEECRYPTAPI /*@unused@*/
-void mpfill(size_t size, /*@out@*/ mpw* data, mpw fill)
- /*@modifies data @*/;
+BEECRYPTAPI
+void mpfill(size_t size, mpw* data, mpw fill);
-/**
- * This function tests if a multi-precision integer is odd.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if odd, 0 if even
+/*!\fn int mpodd(size_t size, const mpw* data)
+ * \brief This functions tests if a multi-precision integer is odd.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if odd
+ * \retval 0 if even
*/
BEECRYPTAPI
-int mpodd (size_t size, const mpw* data)
- /*@*/;
+int mpodd (size_t size, const mpw* data);
-/**
- * This function tests if a multi-precision integer is even.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if even, 0 if odd
+/*!\fn int mpeven(size_t size, const mpw* data)
+ * \brief This function tests if a multi-precision integer is even.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if even
+ * \retval 0 if odd
*/
BEECRYPTAPI
-int mpeven(size_t size, const mpw* data)
- /*@*/;
+int mpeven(size_t size, const mpw* data);
-/**
- * This function tests if a multi-precision integer is zero.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if zero, 0 if not zero
+/*!\fn int mpz(size_t size, const mpw* data)
+ * \brief This function tests if a multi-precision integer is zero.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if zero
+ * \retval 0 if not zero
*/
BEECRYPTAPI
-int mpz (size_t size, const mpw* data)
- /*@*/;
+int mpz (size_t size, const mpw* data);
-/**
- * This function tests if a multi-precision integer is not zero.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if not zero, 0 if zero
+/*!\fn int mpnz(size_t size, const mpw* data)
+ * \brief This function tests if a multi-precision integer is not zero.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if not zero
+ * \retval 0 if zero
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int mpnz (size_t size, const mpw* data)
- /*@*/;
-/*@=exportlocal@*/
+int mpnz (size_t size, const mpw* data);
-/**
- * This function tests if two multi-precision integers of the same size
+/*!\fn int mpeq(size_t size, const mpw* xdata, const mpw* ydata)
+ * \brief This function tests if two multi-precision integers of the same size
* are equal.
- * @param size The size of the multi-precision integers.
- * @param xdata The first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if equal, 0 if not equal
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if equal
+ * \retval 0 if not equal
*/
BEECRYPTAPI
-int mpeq (size_t size, const mpw* xdata, const mpw* ydata)
- /*@*/;
+int mpeq (size_t size, const mpw* xdata, const mpw* ydata);
-/**
- * This function tests if two multi-precision integers of the same size
+/*!\fn int mpne(size_t size, const mpw* xdata, const mpw* ydata)
+ * \brief This function tests if two multi-precision integers of the same size
* differ.
- * @param size The size of the multi-precision integers.
- * @param xdata The first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if not equal, 0 if equal
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if not equal
+ * \retval 0 if equal
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int mpne (size_t size, const mpw* xdata, const mpw* ydata)
- /*@*/;
-/*@=exportlocal@*/
+int mpne (size_t size, const mpw* xdata, const mpw* ydata);
-/**
- * This function tests if the first of two multi-precision integers
+/*!\fn int mpgt(size_t size, const mpw* xdata, const mpw* ydata)
+ * \brief This function tests if the first of two multi-precision integers
* of the same size is greater than the second.
- * @note The comparison treats the arguments as unsigned.
- * @param size The size of the multi-precision integers.
- * @param xdata The first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if greater, 0 if less or equal
+ * \note The comparison treats the arguments as unsigned.
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if greater
+ * \retval 0 if less or equal
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int mpgt (size_t size, const mpw* xdata, const mpw* ydata)
- /*@*/;
-/*@=exportlocal@*/
+int mpgt (size_t size, const mpw* xdata, const mpw* ydata);
-/**
- * This function tests if the first of two multi-precision integers
+/*!\fn int mplt(size_t size, const mpw* xdata, const mpw* ydata)
+ * \brief This function tests if the first of two multi-precision integers
* of the same size is less than the second.
- * @note The comparison treats the arguments as unsigned.
- * @param size The size of the multi-precision integers.
- * @param xdata The first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if less, 0 if greater or equal
+ * \note The comparison treats the arguments as unsigned.
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if less
+ * \retval 0 if greater or equal
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int mplt (size_t size, const mpw* xdata, const mpw* ydata)
- /*@*/;
-/*@=exportlocal@*/
+int mplt (size_t size, const mpw* xdata, const mpw* ydata);
-/**
- * This function tests if the first of two multi-precision integers
+/*!\fn int mpge(size_t size, const mpw* xdata, const mpw* ydata)
+ * \brief This function tests if the first of two multi-precision integers
* of the same size is greater than or equal to the second.
- * @note The comparison treats the arguments as unsigned.
- * @param size The size of the multi-precision integers.
- * @param xdata The first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if greater or equal, 0 if less
+ * \note The comparison treats the arguments as unsigned.
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if greater or equal
+ * \retval 0 if less
*/
BEECRYPTAPI
-int mpge (size_t size, const mpw* xdata, const mpw* ydata)
- /*@*/;
+int mpge (size_t size, const mpw* xdata, const mpw* ydata);
-/**
- * This function tests if the first of two multi-precision integers
+/*!\fn int mple(size_t size, const mpw* xdata, const mpw* ydata)
+ * \brief This function tests if the first of two multi-precision integers
* of the same size is less than or equal to the second.
- * @note The comparison treats the arguments as unsigned.
- * @param size The size of the multi-precision integers.
- * @param xdata The first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if less or equal, 0 if greater
+ * \note The comparison treats the arguments as unsigned.
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if less or equal
+ * \retval 0 if greater
*/
BEECRYPTAPI
-int mple (size_t size, const mpw* xdata, const mpw* ydata)
- /*@*/;
+int mple (size_t size, const mpw* xdata, const mpw* ydata);
-/**
- * This function tests if two multi-precision integers of different
+/*!\fn int mpeqx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function tests if two multi-precision integers of different
* size are equal.
- * @param xsize The size of the first multi-precision integer.
- * @param xdata The first multi-precision integer.
- * @param ysize The size of the first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if equal, 0 if not equal
- */
-BEECRYPTAPI
-int mpeqx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
- /*@*/;
-
-/**
- * This function tests if two multi-precision integers of different
- * size differ.
- * @param xsize The size of the first multi-precision integer.
- * @param xdata The first multi-precision integer.
- * @param ysize The size of the first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if not equal, 0 if equal
- */
-BEECRYPTAPI /*@unused@*/
-int mpnex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
- /*@*/;
-
-/**
- * This function tests if the first of two multi-precision integers
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if equal
+ * \retval 0 if not equal
+ */
+BEECRYPTAPI
+int mpeqx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata);
+
+/*!\fn int mpnex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function tests if two multi-precision integers of different
+ * size are equal.
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if equal
+ * \retval 0 if not equal
+*/
+BEECRYPTAPI
+int mpnex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata);
+
+/*!\fn int mpgtx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function tests if the first of two multi-precision integers
* of different size is greater than the second.
- * @note The comparison treats the arguments as unsigned.
- * @param xsize The size of the first multi-precision integer.
- * @param xdata The first multi-precision integer.
- * @param ysize The size of the second multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if greater, 0 if less or equal
- */
-BEECRYPTAPI /*@unused@*/
-int mpgtx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
- /*@*/;
-
-/**
- * This function tests if the first of two multi-precision integers
+ * \note The comparison treats the arguments as unsigned.
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the second multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if greater
+ * \retval 0 if less or equal
+ */
+BEECRYPTAPI
+int mpgtx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata);
+
+/*!\fn int mpltx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function tests if the first of two multi-precision integers
* of different size is less than the second.
- * @note The comparison treats the arguments as unsigned.
- * @param xsize The size of the first multi-precision integer.
- * @param xdata The first multi-precision integer.
- * @param ysize The size of the second multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if less, 0 if greater or equal
- */
-BEECRYPTAPI /*@unused@*/
-int mpltx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
- /*@*/;
-
-/**
- * This function tests if the first of two multi-precision integers
+ * \note The comparison treats the arguments as unsigned.
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the second multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if less
+ * \retval 0 if greater or equal
+ */
+BEECRYPTAPI
+int mpltx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata);
+
+/*!\fn int mpgex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function tests if the first of two multi-precision integers
* of different size is greater than or equal to the second.
- * @note The comparison treats the arguments as unsigned.
- * @param xsize The size of the first multi-precision integer.
- * @param xdata The first multi-precision integer.
- * @param ysize The size of the second multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if greater or equal, 0 if less
+ * \note The comparison treats the arguments as unsigned.
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the second multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if greater or equal
+ * \retval 0 if less
*/
BEECRYPTAPI
-int mpgex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
- /*@*/;
+int mpgex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata);
-/**
- * This function tests if the first of two multi-precision integers
+/*!\fn int mplex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function tests if the first of two multi-precision integers
* of different size is less than or equal to the second.
- * @note The comparison treats the arguments as unsigned.
- * @param xsize The size of the first multi-precision integer.
- * @param xdata The first multi-precision integer.
- * @param ysize The size of the second multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if less or equal, 0 if greater
+ * \note The comparison treats the arguments as unsigned.
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the second multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if less or equal
+ * \retval 0 if greater
*/
BEECRYPTAPI
-int mplex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
- /*@*/;
+int mplex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata);
-/**
- * This function tests if the value of a multi-precision integer is
+/*!\fn int mpisone(size_t size, const mpw* data)
+ * \brief This functions tests if the value of a multi-precision integer is
* equal to one.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if equal to one, 0 otherwise.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if one
+ * \retval 0 if not one
*/
BEECRYPTAPI
-int mpisone(size_t size, const mpw* data)
- /*@*/;
+int mpisone(size_t size, const mpw* data);
-/**
- * This function tests if the value of a multi-precision integer is
+/*!\fn int mpistwo(size_t size, const mpw* data)
+ * \brief This function tests if the value of a multi-precision integer is
* equal to two.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if equal to two, 0 otherwise.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if two
+ * \retval 0 if not two
*/
BEECRYPTAPI
-int mpistwo(size_t size, const mpw* data)
- /*@*/;
+int mpistwo(size_t size, const mpw* data);
-/**
- * This function tests if the value of a multi-precision integer is
+/*!\fn int mpleone(size_t size, const mpw* data);
+ * \brief This function tests if the value of a multi-precision integer is
* less than or equal to one.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if less than or equal to one, 0 otherwise.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if less than or equal to one.
+ * \retval 0 if greater than one.
*/
BEECRYPTAPI
-int mpleone(size_t size, const mpw* data)
- /*@*/;
+int mpleone(size_t size, const mpw* data);
-/**
- * This function tests if multi-precision integer x is equal to y minus one.
- * @param size The size of the multi-precision integers.
- * @param xdata The first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return 1 if less than or equal to (y-1), 0 otherwise.
+/*!\fn int mpeqmone(size_t size, const mpw* xdata, const mpw* ydata);
+ * \brief This function tests if multi-precision integer x is equal to y
+ * minus one.
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \retval 1 if less than or equal to one.
+ * \retval 0 if greater than one.
*/
-BEECRYPTAPI /*@unused@*/
-int mpeqmone(size_t size, const mpw* xdata, const mpw* ydata)
- /*@*/;
+BEECRYPTAPI
+int mpeqmone(size_t size, const mpw* xdata, const mpw* ydata);
-/**
- * This function tests the most significant bit of a multi-precision integer.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if set, 0 if not set
+/*!\fn int mpmsbset(size_t size, const mpw* data)
+ * \brief This function tests if the most significant bit of a multi-precision
+ * integer is set.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if set
+ * \retval 0 if not set
*/
BEECRYPTAPI
-int mpmsbset(size_t size, const mpw* data)
- /*@*/;
+int mpmsbset(size_t size, const mpw* data);
-/**
- * This function tests the least significant bit of a multi-precision integer.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
- * @return 1 if set, 0 if not set
+/*!\fn int mplsbset(size_t size, const mpw* data)
+ * \brief This function tests if the leiast significant bit of a multi-precision
+ * integer is set.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
+ * \retval 1 if set
+ * \retval 0 if not set
*/
-BEECRYPTAPI /*@unused@*/
-int mplsbset(size_t size, const mpw* data)
- /*@*/;
+BEECRYPTAPI
+int mplsbset(size_t size, const mpw* data);
-/**
- * This function sets the most significant bit of a multi-precision integer.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
+/*!\fn void mpsetmsb(size_t size, mpw* data)
+ * \brief This function sets the most significant bit of a multi-precision
+ * integer.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
-BEECRYPTAPI /*@unused@*/
-void mpsetmsb(size_t size, mpw* data)
- /*@modifies data @*/;
+BEECRYPTAPI
+void mpsetmsb(size_t size, mpw* data);
-/**
- * This function sets the least significant bit of a multi-precision integer.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
+/*!\fn void mpsetlsb(size_t size, mpw* data)
+ * \brief This function sets the least significant bit of a multi-precision
+ * integer.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
BEECRYPTAPI
-void mpsetlsb(size_t size, mpw* data)
- /*@modifies data @*/;
+void mpsetlsb(size_t size, mpw* data);
-/**
- * This function clears the most significant bit of a multi-precision integer.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
+/*!\fn void mpclrmsb(size_t size, mpw* data)
+ * \brief This function clears the most significant bit of a multi-precision
+ * integer.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
-BEECRYPTAPI /*@unused@*/
-void mpclrmsb(size_t size, mpw* data)
- /*@modifies data @*/;
+BEECRYPTAPI
+void mpclrmsb(size_t size, mpw* data);
-/**
- * This function clears the least significant bit of a multi-precision integer.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
+/*!\fn void mpclrlsb(size_t size, mpw* data)
+ * \brief This function clears the least significant bit of a multi-precision
+ * integer.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
-BEECRYPTAPI /*@unused@*/
-void mpclrlsb(size_t size, mpw* data)
- /*@modifies data @*/;
+BEECRYPTAPI
+void mpclrlsb(size_t size, mpw* data);
-/**
+/*!\fn mpand(size_t size, mpw* xdata, const mpw* ydata)
+ * \brief This function computes the bit-wise AND of two multi-precision
+ * integers. Modifies xdata.
+ * \param size The size of the multi-precision integers.
+ * \param xdata The multi-precision integer data.
+ * \param ydata The multi-precision integer data.
*/
-BEECRYPTAPI /*@unused@*/
-void mpand(size_t size, mpw* xdata, const mpw* ydata)
- /*@modifies xdata @*/;
+BEECRYPTAPI
+void mpand(size_t size, mpw* xdata, const mpw* ydata);
-/**
+/*!\fn void mpor(size_t size, mpw* xdata, const mpw* ydata)
+ * \brief This function computes the bit-wise OR of two multi-precision
+ * integers. Modifies xdata.
+ * \param size The size of the multi-precision integer.
+ * \param xdata The multi-precision integer data.
+ * \param ydata The multi-precision integer data.
*/
-BEECRYPTAPI /*@unused@*/
-void mpxor(size_t size, mpw* xdata, const mpw* ydata)
- /*@modifies xdata @*/;
+BEECRYPTAPI
+void mpor(size_t size, mpw* xdata, const mpw* ydata);
-/**
+/*!\fn void mpxor(size_t size, mpw* xdata, const mpw* ydata)
+ * \brief This function computes the bit-wise XOR of two multi-precision
+ * integers. Modifies xdata.
+ * \param size The size of the multi-precision integer.
+ * \param xdata The multi-precision integer data.
+ * \param ydata The multi-precision integer data.
*/
-BEECRYPTAPI /*@unused@*/
-void mpor(size_t size, mpw* xdata, const mpw* ydata)
- /*@modifies xdata @*/;
+BEECRYPTAPI
+void mpxor(size_t size, mpw* xdata, const mpw* ydata);
-/**
- * This function flips all bits of a multi-precision integer.
- * @param size The size of the multi-precision integer.
- * @param data The multi-precision integer data.
+/*!\fn mpnot(size_t size, mpw* data)
+ * \brief This function flips all bits of a multi-precision integer.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-void mpnot(size_t size, mpw* data)
- /*@modifies data @*/;
-/*@=exportlocal@*/
+void mpnot(size_t size, mpw* data);
-/**
+/*!\fn void mpsetw(size_t size, mpw* xdata, mpw y)
+ * \brief This function sets the value of a multi-precision integer to the
+ * given word. The given value is copied into the least significant word,
+ * while the most significant words are zeroed.
+ * \param size The size of the multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param y The multi-precision word.
*/
BEECRYPTAPI
-void mpsetw(size_t size, /*@out@*/ mpw* xdata, mpw y)
- /*@modifies xdata @*/;
+void mpsetw(size_t size, mpw* xdata, mpw y);
-/**
+/*!\fn void mpsetx(size_t xsize, mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function set the value of the first multi-precision integer
+ * to the second, truncating the most significant words if ysize > xsize, or
+ * zeroing the most significant words if ysize < xsize.
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the second multi-precision integer.
+ * \param ydata The second multi-precision integer.
*/
-BEECRYPTAPI
-void mpsetx(size_t xsize, /*@out@*/ mpw* xdata, size_t ysize, const mpw* ydata)
- /*@modifies xdata @*/;
+void mpsetx(size_t xsize, mpw* xdata, size_t ysize, const mpw* ydata);
-/**
+/*!\fn int mpaddw(size_t size, mpw* xdata, mpw y)
+ * \brief This function adds one word to a multi-precision integer.
+ * The performed operation is in pseudocode: x += y.
+ * \param size The size of the multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param y The multi-precision word.
+ * \return The carry-over value of the operation; this value is either 0 or 1.
*/
BEECRYPTAPI
-int mpaddw(size_t size, mpw* xdata, mpw y)
- /*@modifies xdata @*/;
+int mpaddw(size_t size, mpw* xdata, mpw y);
-/**
- * This function adds two multi-precision integers of equal size.
- * The performed operation is in pseudocode: x += y
- * @param size The size of the multi-precision integers.
- * @param xdata The first multi-precision integer.
- * @param ydata The second multi-precision integer.
- * @return The carry-over value of the operation (either 0 or 1).
+/*!\fn int mpadd(size_t size, mpw* xdata, const mpw* ydata)
+ * \brief This function adds two multi-precision integers of equal size.
+ * The performed operation is in pseudocode: x += y.
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \return The carry-over value of the operation; this value is either 0 or 1.
*/
BEECRYPTAPI
-int mpadd (size_t size, mpw* xdata, const mpw* ydata)
- /*@modifies xdata @*/;
+int mpadd (size_t size, mpw* xdata, const mpw* ydata);
-/**
+/*!\fn int mpaddx(size_t xsize, mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function adds two multi-precision integers of different size.
+ * The performed operation in pseudocode: x += y.
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the second multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \return The carry-over value of the operation; this value is either 0 or 1.
*/
BEECRYPTAPI
-int mpaddx(size_t xsize, mpw* xdata, size_t ysize, const mpw* ydata)
- /*@modifies xdata @*/;
+int mpaddx(size_t xsize, mpw* xdata, size_t ysize, const mpw* ydata);
-/**
+/*!\fn int mpsubw(size_t size, mpw* xdata, mpw y)
+ * \brief This function subtracts one word to a multi-precision integer.
+ * The performed operation in pseudocode: x -= y
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param y The multi-precision word.
+ * \return The carry-over value of the operation; this value is either 0 or 1.
*/
BEECRYPTAPI
-int mpsubw(size_t size, mpw* xdata, mpw y)
- /*@modifies xdata @*/;
+int mpsubw(size_t size, mpw* xdata, mpw y);
-/**
+/*!\fn int mpsub(size_t size, mpw* xdata, const mpw* ydata)
+ * \brief This function subtracts two multi-precision integers of equal size.
+ * The performed operation in pseudocode: x -= y
+ * \param size The size of the multi-precision integers.
+ * \param xdata The first multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \return The carry-over value of the operation; this value is either 0 or 1.
*/
BEECRYPTAPI
-int mpsub (size_t size, mpw* xdata, const mpw* ydata)
- /*@modifies xdata @*/;
+int mpsub (size_t size, mpw* xdata, const mpw* ydata);
-/**
+/*!\fn int mpsubx(size_t xsize, mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function subtracts two multi-precision integers of different
+ * size. The performed operation in pseudocode: x -= y.
+ * \param xsize The size of the first multi-precision integer.
+ * \param xdata The first multi-precision integer.
+ * \param ysize The size of the second multi-precision integer.
+ * \param ydata The second multi-precision integer.
+ * \return The carry-over value of the operation; this value is either 0 or 1.
*/
BEECRYPTAPI
-int mpsubx(size_t xsize, mpw* xdata, size_t ysize, const mpw* ydata)
- /*@modifies xdata @*/;
+int mpsubx(size_t xsize, mpw* xdata, size_t ysize, const mpw* ydata);
-/**
- */
BEECRYPTAPI
-int mpmultwo(size_t size, mpw* data)
- /*@modifies data @*/;
+int mpmultwo(size_t size, mpw* data);
-/**
+/*!\fn void mpneg(size_t size, mpw* data)
+ * \brief This function negates a multi-precision integer.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
BEECRYPTAPI
-void mpneg(size_t size, mpw* data)
- /*@modifies data @*/;
+void mpneg(size_t size, mpw* data);
-/**
+/*!\fn size_t mpsize(size_t size, const mpw* data)
+ * \brief This function returns the true size of a multi-precision
+ * integer, after stripping leading zero words.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
-BEECRYPTAPI /*@unused@*/
-size_t mpsize(size_t size, const mpw* data)
- /*@*/;
+BEECRYPTAPI
+size_t mpsize(size_t size, const mpw* data);
-/**
+/*!\fn size_t mpbits(size_t size, const mpw* data)
+ * \brief This function returns the number of significant bits
+ * in a multi-precision integer.
+ * \param size The size of the multi-precision integer.
+ * \param data The multi-precision integer data.
*/
BEECRYPTAPI
-size_t mpbits(size_t size, const mpw* data)
- /*@*/;
+size_t mpbits(size_t size, const mpw* data);
-/**
- */
BEECRYPTAPI
-size_t mpmszcnt(size_t size, const mpw* data)
- /*@*/;
+size_t mpmszcnt(size_t size, const mpw* data);
-/**
- */
-/*@-exportlocal@*/
-BEECRYPTAPI /*@unused@*/
-size_t mplszcnt(size_t size, const mpw* data)
- /*@*/;
-/*@=exportlocal@*/
+BEECRYPTAPI
+size_t mplszcnt(size_t size, const mpw* data);
-/**
- */
BEECRYPTAPI
-void mplshift(size_t size, mpw* data, size_t count)
- /*@modifies data @*/;
+void mplshift(size_t size, mpw* data, size_t count);
-/**
- */
BEECRYPTAPI
-void mprshift(size_t size, mpw* data, size_t count)
- /*@modifies data @*/;
+void mprshift(size_t size, mpw* data, size_t count);
-/**
- */
BEECRYPTAPI
-size_t mprshiftlsz(size_t size, mpw* data)
- /*@modifies data @*/;
+size_t mprshiftlsz(size_t size, mpw* data);
-/**
- */
BEECRYPTAPI
-size_t mpnorm(size_t size, mpw* data)
- /*@modifies data @*/;
+size_t mpnorm(size_t size, mpw* data);
-/**
- */
BEECRYPTAPI
-void mpdivtwo (size_t size, mpw* data)
- /*@modifies data @*/;
+void mpdivtwo (size_t size, mpw* data);
-/**
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-void mpsdivtwo(size_t size, mpw* data)
- /*@modifies data @*/;
-/*@=exportlocal@*/
+void mpsdivtwo(size_t size, mpw* data);
-/**
- * This function performs a multi-precision multiply-setup.
+/*!\fn mpw mpsetmul(size_t size, mpw* result, const mpw* data, mpw y)
+ * \brief This function performs a multi-precision multiply-setup.
*
* This function is used in the computation of a full multi-precision
* multiplication. By using it we can shave off a few cycles; otherwise we'd
* have to zero the least significant half of the result first and use
* another call to the slightly slower mpaddmul function.
*
- * @param size The size of multi-precision integer multiplier.
- * @param result The place where result will be accumulated.
- * @param data The multi-precision integer multiplier.
- * @param y The multiplicand.
- * @return The carry-over multi-precision word.
+ * \param size The size of multi-precision integer multiplier.
+ * \param result The place where result will be accumulated.
+ * \param data The multi-precision integer multiplier.
+ * \param y The multiplicand.
+ * \return The carry-over multi-precision word.
*/
BEECRYPTAPI
-mpw mpsetmul (size_t size, /*@out@*/ mpw* result, const mpw* data, mpw y)
- /*@modifies result @*/;
+mpw mpsetmul (size_t size, mpw* result, const mpw* data, mpw y);
-/**
- * This function performs a mult-precision multiply-accumulate.
+/*!\fn mpw mpaddmul(size_t size, mpw* result, const mpw* data, mpw y)
+ * \brief This function performs a mult-precision multiply-accumulate.
*
* This function is used in the computation of a full multi-precision
* multiplication. It computes the product-by-one-word and accumulates it with
* the previous result.
*
- * @param size The size of multi-precision integer multiplier.
- * @param result The place where result will be accumulated.
- * @param data The multi-precision integer multiplier.
- * @param y The multiplicand.
- * @return The carry-over multi-precision word.
+ * \param size The size of multi-precision integer multiplier.
+ * \param result The place where result will be accumulated.
+ * \param data The multi-precision integer multiplier.
+ * \param y The multiplicand.
+ * \retval The carry-over multi-precision word.
*/
BEECRYPTAPI
-mpw mpaddmul (size_t size, /*@out@*/ mpw* result, const mpw* data, mpw y)
- /*@modifies result @*/;
+mpw mpaddmul (size_t size, mpw* result, const mpw* data, mpw y);
-/**
- * This function is used in the calculation of a multi-precision
+/*!\fn void mpaddsqrtrc(size_t size, mpw* result, const mpw* data)
+ * \brief This function is used in the calculation of a multi-precision
* squaring.
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-void mpaddsqrtrc(size_t size, /*@out@*/ mpw* result, const mpw* data)
- /*@modifies result @*/;
-/*@=exportlocal@*/
+void mpaddsqrtrc(size_t size, mpw* result, const mpw* data);
-/**
- * This function computes a full multi-precision product.
+/*!\fn void mpmul(mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
+ * \brief This function computes a full multi-precision product.
*/
BEECRYPTAPI
-void mpmul(/*@out@*/ mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
- /*@modifies result @*/;
+void mpmul(mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata);
-/**
- * This function computes a full multi-precision square.
+/*!\fn void mpsqr(mpw* result, size_t size, const mpw* data)
+ * \brief This function computes a full multi-precision square.
*/
BEECRYPTAPI
-void mpsqr(/*@out@*/ mpw* result, size_t size, const mpw* data)
- /*@modifies result @*/;
+void mpsqr(mpw* result, size_t size, const mpw* data);
-/**
- */
BEECRYPTAPI
-void mpgcd_w(size_t size, const mpw* xdata, const mpw* ydata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
+void mpgcd_w(size_t size, const mpw* xdata, const mpw* ydata, mpw* result, mpw* wksp);
-/**
- */
BEECRYPTAPI
-int mpextgcd_w(size_t size, const mpw* xdata, const mpw* ndata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
+int mpextgcd_w(size_t size, const mpw* xdata, const mpw* ydata, mpw* result, mpw* wksp);
-/**
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-mpw mppndiv(mpw xhi, mpw xlo, mpw y)
- /*@*/;
-/*@=exportlocal@*/
+mpw mppndiv(mpw xhi, mpw xlo, mpw y);
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpmod(/*@out@*/ mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, /*@out@*/ mpw* workspace)
- /*@modifies result, workspace @*/;
+BEECRYPTAPI
+void mpmod (mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw*ydata, mpw* wksp);
-/**
- */
BEECRYPTAPI
-void mpndivmod(/*@out@*/ mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, /*@out@*/ mpw* workspace)
- /*@modifies result, workspace @*/;
+void mpndivmod(mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, mpw* wksp);
-/**
+/*
+ * Output Routines
*/
-BEECRYPTAPI /*@unused@*/
-void mpprint(size_t size, /*@null@*/ const mpw* data)
- /*@globals stdout, fileSystem @*/
- /*@modifies stdout, fileSystem @*/;
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpprintln(size_t size, /*@null@*/ const mpw* data)
- /*@globals stdout, fileSystem @*/
- /*@modifies stdout, fileSystem @*/;
+BEECRYPTAPI
+void mpprint(size_t size, const mpw* data);
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpfprint(/*@null@*/ FILE * f, size_t size, /*@null@*/ const mpw* data)
- /*@globals fileSystem @*/
- /*@modifies *f, fileSystem @*/;
+BEECRYPTAPI
+void mpprintln(size_t size, const mpw* data);
-/**
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-void mpfprintln(/*@null@*/ FILE * f, size_t size, /*@null@*/ const mpw* data)
- /*@globals fileSystem @*/
- /*@modifies *f, fileSystem @*/;
-/*@=exportlocal@*/
+void mpfprint(FILE* f, size_t size, const mpw* data);
-/**
- */
BEECRYPTAPI
-int i2osp(/*@out@*/ byte *osdata, size_t ossize, const mpw* idata, size_t isize)
- /*@modifies osdata @*/;
+void mpfprintln(FILE* f, size_t size, const mpw* data);
-/**
+/*
+ * Conversion Routines
*/
+
BEECRYPTAPI
-int os2ip(/*@out@*/ mpw *idata, size_t isize, const byte* osdata, size_t ossize)
- /*@modifies idata @*/;
+int os2ip(mpw* idata, size_t isize, const byte* osdata, size_t ossize);
+
+BEECRYPTAPI
+int i2osp(byte* osdata, size_t ossize, const mpw* idata, size_t isize);
-/**
- */
BEECRYPTAPI
-int hs2ip(/*@out@*/ mpw* idata, size_t isize, const char* hsdata, size_t hssize)
- /*@modifies idata @*/;
+int hs2ip(mpw* idata, size_t isize, const char* hsdata, size_t hssize);
#ifdef __cplusplus
}
* \ingroup MP__m
*/
-#include "system.h"
-#include "mp.h"
-#include "mpprime.h"
-#include "mpnumber.h"
-#include "mpbarrett.h"
-#include "debug.h"
-
-/**
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/mpprime.h"
+#include "beecrypt/mpnumber.h"
+#include "beecrypt/mpbarrett.h"
+
+/*
* mpbzero
*/
void mpbzero(mpbarrett* b)
{
b->size = 0;
- b->modl = (mpw*) 0;
- b->mu = (mpw*) 0;
+ b->modl = b->mu = (mpw*) 0;
}
-/*@-nullstate@*/ /* b->modl may be null @*/
-/**
- * Allocates the data words for an mpbarrett structure.
- * will allocate 2*size+1 words
+/*
+ * mpbinit
+ * \brief allocates the data words for an mpbarrett structure
+ * will allocate 2*size+1 words
*/
void mpbinit(mpbarrett* b, size_t size)
{
b->size = size;
- if (b->modl)
- free(b->modl);
- b->modl = (mpw*) calloc(2*size+1, sizeof(*b->modl));
+ b->modl = (mpw*) calloc(2*size+1, sizeof(mpw));
if (b->modl != (mpw*) 0)
b->mu = b->modl+size;
else
b->mu = (mpw*) 0;
}
-/*@=nullstate@*/
-/**
+/*
* mpbfree
*/
void mpbfree(mpbarrett* b)
if (b->modl != (mpw*) 0)
{
free(b->modl);
- b->modl = (mpw*) 0;
- b->mu = (mpw*) 0;
+ b->modl = b->mu = (mpw*) 0;
}
b->size = 0;
}
-/*@-nullstate -compdef @*/ /* b->modl may be null @*/
void mpbcopy(mpbarrett* b, const mpbarrett* copy)
{
register size_t size = copy->size;
if (b->modl)
{
if (b->size != size)
- b->modl = (mpw*) realloc(b->modl, (2*size+1) * sizeof(*b->modl));
+ b->modl = (mpw*) realloc(b->modl, (2*size+1) * sizeof(mpw));
}
else
- b->modl = (mpw*) malloc((2*size+1) * sizeof(*b->modl));
+ b->modl = (mpw*) malloc((2*size+1) * sizeof(mpw));
if (b->modl)
{
{
free(b->modl);
b->size = 0;
- b->modl = (mpw*) 0;
- b->mu = (mpw*) 0;
+ b->modl = b->mu = (mpw*) 0;
}
}
-/*@=nullstate =compdef @*/
-/*@-nullstate -compdef @*/ /* b->modl may be null @*/
-/**
+void mpbwipe(mpbarrett* b)
+{
+ if (b->modl != (mpw*) 0)
+ mpzero(2*(b->size)+1, b->modl);
+}
+
+/*
* mpbset
*/
-void mpbset(mpbarrett* b, size_t size, const mpw* data)
+void mpbset(mpbarrett* b, size_t size, const mpw *data)
{
if (size > 0)
{
if (b->modl)
{
if (b->size != size)
- b->modl = (mpw*) realloc(b->modl, (2*size+1) * sizeof(*b->modl));
+ b->modl = (mpw*) realloc(b->modl, (2*size+1) * sizeof(mpw));
}
else
- b->modl = (mpw*) malloc((2*size+1) * sizeof(*b->modl));
+ b->modl = (mpw*) malloc((2*size+1) * sizeof(mpw));
if (b->modl)
{
- mpw* temp = (mpw*) malloc((6*size+4) * sizeof(*temp));
+ mpw* temp = (mpw*) malloc((6*size+4) * sizeof(mpw));
- assert(temp != NULL);
b->size = size;
b->mu = b->modl+size;
mpcopy(size, b->modl, data);
}
}
}
-/*@=nullstate =compdef @*/
-/*@-nullstate -compdef @*/ /* b->modl may be null @*/
-void mpbsethex(mpbarrett* b, const char* hex)
+int mpbsetbin(mpbarrett* b, const byte* osdata, size_t ossize)
{
+ int rc = -1;
+ size_t size;
+
+ /* skip zero bytes */
+ while (!(*osdata) && ossize)
+ {
+ osdata++;
+ ossize--;
+ }
+
+ size = MP_BYTES_TO_WORDS(ossize + MP_WBYTES - 1);
+
+ if (b->modl)
+ {
+ if (b->size != size)
+ b->modl = (mpw*) realloc(b->modl, (2*size+1) * sizeof(mpw));
+ }
+ else
+ b->modl = (mpw*) malloc((2*size+1) * sizeof(mpw));
+
+ if (b->modl)
+ {
+ register mpw* temp = (mpw*) malloc((6*size+4) * sizeof(mpw));
+
+ b->size = size;
+ b->mu = b->modl+size;
+
+ rc = os2ip(b->modl, size, osdata, ossize);
+
+ mpbmu_w(b, temp);
+
+ free(temp);
+ }
+
+ return rc;
+}
+
+int mpbsethex(mpbarrett* b, const char* hex)
+{
+ int rc = -1;
size_t len = strlen(hex);
size_t size = MP_NIBBLES_TO_WORDS(len + MP_WNIBBLES - 1);
if (b->modl)
{
if (b->size != size)
- b->modl = (mpw*) realloc(b->modl, (2*size+1) * sizeof(*b->modl));
+ b->modl = (mpw*) realloc(b->modl, (2*size+1) * sizeof(mpw));
}
else
- b->modl = (mpw*) malloc((2*size+1) * sizeof(*b->modl));
+ b->modl = (mpw*) malloc((2*size+1) * sizeof(mpw));
- if (b->modl != (mpw*) 0)
+ if (b->modl)
{
- register mpw* temp = (mpw*) malloc((6*size+4) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((6*size+4) * sizeof(mpw));
- assert(temp != NULL);
b->size = size;
b->mu = b->modl+size;
- (void) hs2ip(b->modl, size, hex, len);
+ rc = hs2ip(b->modl, size, hex, len);
mpbmu_w(b, temp);
b->size = 0;
b->mu = 0;
}
+
+ return rc;
}
-/*@=nullstate =compdef @*/
-/**
- * Computes the Barrett 'mu' coefficient.
+/*
+ * mpbmu_w
+ * computes the Barrett 'mu' coefficient
* needs workspace of (6*size+4) words
*/
void mpbmu_w(mpbarrett* b, mpw* wksp)
*dividend = ((mpw) MP_LSBMASK << shift);
mpzero(size*2, dividend+1);
mpndivmod(divmod, size*2+1, dividend, size, b->modl, workspace);
- /*@-nullpass@*/ /* b->mu may be NULL */
mpcopy(size+1, b->mu, divmod+1);
- /*@=nullpass@*/
/* de-normalize */
mprshift(size, b->modl, shift);
}
-/**
- * Generates a random number in the range 1 < r < b-1.
+/*
+ * mpbrnd_w
+ * generates a random number in the range 1 < r < b-1
* need workspace of (size) words
*/
void mpbrnd_w(const mpbarrett* b, randomGeneratorContext* rc, mpw* result, mpw* wksp)
size_t msz = mpmszcnt(b->size, b->modl);
mpcopy(b->size, wksp, b->modl);
- (void) mpsubw(b->size, wksp, 1);
+ mpsubw(b->size, wksp, 1);
do
{
- /*@-noeffectuncon@*/ /* LCL: ??? */
- (void) rc->rng->next(rc->param, (byte*) result, MP_WORDS_TO_BYTES(b->size));
- /*@=noeffectuncon@*/
+ rc->rng->next(rc->param, (byte*) result, MP_WORDS_TO_BYTES(b->size));
- /*@-shiftimplementation -usedef@*/
result[0] &= (MP_ALLMASK >> msz);
- /*@=shiftimplementation =usedef@*/
while (mpge(b->size, result, wksp))
- (void) mpsub(b->size, result, wksp);
+ mpsub(b->size, result, wksp);
} while (mpleone(b->size, result));
}
-/**
- * Generates a random odd number in the range 1 < r < b-1.
+/*
+ * mpbrndodd_w
+ * generates a random odd number in the range 1 < r < b-1
* needs workspace of (size) words
*/
void mpbrndodd_w(const mpbarrett* b, randomGeneratorContext* rc, mpw* result, mpw* wksp)
size_t msz = mpmszcnt(b->size, b->modl);
mpcopy(b->size, wksp, b->modl);
- (void) mpsubw(b->size, wksp, 1);
+ mpsubw(b->size, wksp, 1);
do
{
- /*@-noeffectuncon@*/ /* LCL: ??? */
- (void) rc->rng->next(rc->param, (byte*) result, MP_WORDS_TO_BYTES(b->size));
- /*@=noeffectuncon@*/
+ rc->rng->next(rc->param, (byte*) result, MP_WORDS_TO_BYTES(b->size));
- /*@-shiftimplementation -usedef@*/
result[0] &= (MP_ALLMASK >> msz);
- /*@=shiftimplementation =usedef@*/
mpsetlsb(b->size, result);
while (mpge(b->size, result, wksp))
{
- (void) mpsub(b->size, result, wksp);
+ mpsub(b->size, result, wksp);
mpsetlsb(b->size, result);
}
} while (mpleone(b->size, result));
}
-/**
- * Generates a random invertible (modulo b) in the range 1 < r < b-1.
+/*
+ * mpbrndinv_w
+ * generates a random invertible (modulo b) in the range 1 < r < b-1
* needs workspace of (6*size+6) words
*/
void mpbrndinv_w(const mpbarrett* b, randomGeneratorContext* rc, mpw* result, mpw* inverse, mpw* wksp)
else
mpbrnd_w(b, rc, result, wksp);
- } while (mpextgcd_w(size, result, b->modl, inverse, wksp) == 0);
+ } while (mpextgcd_w(size, b->modl, result, inverse, wksp) == 0);
}
-/**
- * Computes the barrett modular reduction of a number x, which has twice the size of b.
+/*
+ * mpbmod_w
+ * computes the barrett modular reduction of a number x, which has twice the size of b
* needs workspace of (2*size+2) words
*/
void mpbmod_w(const mpbarrett* b, const mpw* data, mpw* result, mpw* wksp)
register const mpw* src = data+b->size+1;
register mpw* dst = wksp+b->size+1;
- /*@-nullpass@*/ /* b->mu may be NULL */
rc = mpsetmul(sp, dst, b->mu, *(--src));
*(--dst) = rc;
}
else
*(--dst) = 0;
- /*@=nullpass@*/
sp = b->size;
rc = 0;
dst = wksp+b->size+1;
src = dst;
- /*@-evalorder@*/ /* --src side effect, dst/src aliases */
*dst = mpsetmul(sp, dst+1, b->modl, *(--src));
- /*@=evalorder@*/
while (sp > 0)
- (void) mpaddmul(sp--, dst, b->modl+(rc++), *(--src));
+ mpaddmul(sp--, dst, b->modl+(rc++), *(--src));
mpsetx(b->size+1, wksp, b->size*2, data);
- (void) mpsub(b->size+1, wksp, wksp+b->size+1);
+ mpsub(b->size+1, wksp, wksp+b->size+1);
while (mpgex(b->size+1, wksp, b->size, b->modl))
- (void) mpsubx(b->size+1, wksp, b->size, b->modl);
+ mpsubx(b->size+1, wksp, b->size, b->modl);
mpcopy(b->size, result, wksp+1);
}
-/**
- * Copies (b-1) into result.
+/*
+ * mpbsubone
+ * copies (b-1) into result
*/
void mpbsubone(const mpbarrett* b, mpw* result)
{
register size_t size = b->size;
mpcopy(size, result, b->modl);
- (void) mpsubw(size, result, 1);
+ mpsubw(size, result, 1);
}
-/**
- * Computes the negative (modulo b) of x, where x must contain a value between 0 and b-1.
+/*
+ * mpbneg
+ * computes the negative (modulo b) of x, where x must contain a value between 0 and b-1
*/
void mpbneg(const mpbarrett* b, const mpw* data, mpw* result)
{
mpcopy(size, result, data);
mpneg(size, result);
- (void) mpadd(size, result, b->modl);
+ mpadd(size, result, b->modl);
}
-/**
- * Computes the sum (modulo b) of x and y.
+/*
+ * mpbaddmod_w
+ * computes the sum (modulo b) of x and y
* needs a workspace of (4*size+2) words
*/
void mpbaddmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, mpw* result, mpw* wksp)
register mpw* temp = wksp + size*2+2;
mpsetx(2*size, temp, xsize, xdata);
- (void) mpaddx(2*size, temp, ysize, ydata);
+ mpaddx(2*size, temp, ysize, ydata);
mpbmod_w(b, temp, result, wksp);
}
-/**
- * Computes the difference (modulo b) of x and y.
+/*
+ * mpbsubmod_w
+ * computes the difference (modulo b) of x and y
* needs a workspace of (4*size+2) words
*/
void mpbsubmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, mpw* result, mpw* wksp)
/* xsize and ysize must be less than or equal to b->size */
register size_t size = b->size;
register mpw* temp = wksp + size*2+2;
-
+
mpsetx(2*size, temp, xsize, xdata);
if (mpsubx(2*size, temp, ysize, ydata)) /* if there's carry, i.e. the result would be negative, add the modulus */
- (void) mpaddx(2*size, temp, size, b->modl);
+ mpaddx(2*size, temp, size, b->modl);
mpbmod_w(b, temp, result, wksp);
}
-/**
- * Computes the product (modulo b) of x and y.
+/*
+ * mpmulmod_w
+ * computes the product (modulo b) of x and y
* needs a workspace of (4*size+2) words
*/
void mpbmulmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, mpw* result, mpw* wksp)
mpzero(fill, temp);
mpmul(temp+fill, xsize, xdata, ysize, ydata);
- /*@-compdef@*/ /* *temp undefined */
mpbmod_w(b, temp, result, wksp);
- /*@=compdef@*/
}
-/**
- * Computes the square (modulo b) of x.
+/*
+ * mpbsqrmod_w
+ * computes the square (modulo b) of x
* needs a workspace of (4*size+2) words
*/
void mpbsqrmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, mpw* result, mpw* wksp)
mpzero(fill, temp);
mpsqr(temp+fill, xsize, xdata);
- /*@-compdef@*/ /* *temp undefined */
mpbmod_w(b, temp, result, wksp);
- /*@=compdef@*/
}
-/**
- * Precomputes the sliding window table for computing powers of x modulo b.
- * needs workspace (4*size+2)
- *
+/*
* Sliding Window Exponentiation technique, slightly altered from the method Applied Cryptography:
*
* First of all, the table with the powers of g can be reduced by about half; the even powers don't
* and finally do the number of squarings in column three.
*
* This table can be used for K=2,3,4 and can be extended
- *
- *
-\verbatim
- 0 : - | - | -
- 1 : 1 | g1 @ 0 | 0
- 10 : 1 | g1 @ 0 | 1
- 11 : 2 | g3 @ 1 | 0
- 100 : 1 | g1 @ 0 | 2
- 101 : 3 | g5 @ 2 | 0
- 110 : 2 | g3 @ 1 | 1
- 111 : 3 | g7 @ 3 | 0
- 1000 : 1 | g1 @ 0 | 3
- 1001 : 4 | g9 @ 4 | 0
- 1010 : 3 | g5 @ 2 | 1
- 1011 : 4 | g11 @ 5 | 0
- 1100 : 2 | g3 @ 1 | 2
- 1101 : 4 | g13 @ 6 | 0
- 1110 : 3 | g7 @ 3 | 1
- 1111 : 4 | g15 @ 7 | 0
-\endverbatim
+ *
+ * 0 : - | - | -
+ * 1 : 1 | g1 @ 0 | 0
+ * 10 : 1 | g1 @ 0 | 1
+ * 11 : 2 | g3 @ 1 | 0
+ * 100 : 1 | g1 @ 0 | 2
+ * 101 : 3 | g5 @ 2 | 0
+ * 110 : 2 | g3 @ 1 | 1
+ * 111 : 3 | g7 @ 3 | 0
+ * 1000 : 1 | g1 @ 0 | 3
+ * 1001 : 4 | g9 @ 4 | 0
+ * 1010 : 3 | g5 @ 2 | 1
+ * 1011 : 4 | g11 @ 5 | 0
+ * 1100 : 2 | g3 @ 1 | 2
+ * 1101 : 4 | g13 @ 6 | 0
+ * 1110 : 3 | g7 @ 3 | 1
+ * 1111 : 4 | g15 @ 7 | 0
*
*/
-static void mpbslide_w(const mpbarrett* b, size_t xsize, const mpw* xdata, /*@out@*/ mpw* slide, /*@out@*/ mpw* wksp)
- /*@modifies slide, wksp @*/
+
+/*
+ * mpbslide_w
+ * precomputes the sliding window table for computing powers of x modulo b
+ * needs workspace (4*size+2)
+ */
+void mpbslide_w(const mpbarrett* b, size_t xsize, const mpw* xdata, mpw* slide, mpw* wksp)
{
register size_t size = b->size;
mpbsqrmod_w(b, xsize, xdata, slide , wksp); /* x^2 mod b, temp */
mpsetx(size, slide, xsize, xdata); /* x^1 mod b */
}
-/*@observer@*/ /*@unchecked@*/
-static byte mpbslide_presq[16] =
+static byte mpbslide_presq[16] =
{ 0, 1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 4, 2, 4, 3, 4 };
-/*@observer@*/ /*@unchecked@*/
static byte mpbslide_mulg[16] =
{ 0, 0, 0, 1, 0, 2, 1, 3, 0, 4, 2, 5, 1, 6, 3, 7 };
-/*@observer@*/ /*@unchecked@*/
static byte mpbslide_postsq[16] =
{ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 };
-/**
- * mpbpowmod_w
+/*
* needs workspace of 4*size+2 words
*/
void mpbpowmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, size_t psize, const mpw* pdata, mpw* result, mpw* wksp)
*/
/* K == 4 for the first try */
-
+
size_t size = b->size;
- mpw temp = 0;
+ mpw temp;
while (psize)
{
/* if temp is still zero, then we're trying to raise x to power zero, and result stays one */
if (temp)
{
- mpw* slide = (mpw*) malloc((8*size)*sizeof(*slide));
+ mpw* slide = (mpw*) malloc((8*size)*sizeof(mpw));
- assert(slide != NULL);
mpbslide_w(b, xsize, xdata, slide, wksp);
- /*@-internalglobs -mods@*/ /* noisy */
mpbpowmodsld_w(b, slide, psize, pdata-1, result, wksp);
- /*@=internalglobs =mods@*/
free(slide);
}
*/
size_t size = b->size;
- mpw temp = 0;
+ mpw temp;
mpsetw(size, result, 1);
/* if temp is still zero, then we're trying to raise x to power zero, and result stays one */
if (temp)
{
- unsigned int l = 0, n = 0, count = MP_WBITS;
+ short l = 0, n = 0, count = MP_WBITS;
/* first skip bits until we reach a one */
- while (count != 0)
+ while (count)
{
if (temp & MP_MSBMASK)
break;
while (psize)
{
- while (count != 0)
+ while (count)
{
byte bit = (temp & MP_MSBMASK) ? 1 : 0;
n <<= 1;
n += bit;
-
- if (n != 0)
+
+ if (n)
{
- if (l != 0)
+ if (l)
l++;
- else if (bit != 0)
- l = 1U;
+ else if (bit)
+ l = 1;
- if (l == 4U)
+ if (l == 4)
{
byte s = mpbslide_presq[n];
mpbsqrmod_w(b, size, result, result, wksp);
mpbmulmod_w(b, size, result, size, slide+mpbslide_mulg[n]*size, result, wksp);
-
+
s = mpbslide_postsq[n];
-
+
while (s--)
mpbsqrmod_w(b, size, result, result, wksp);
}
}
- if (n != 0)
+ if (n)
{
byte s = mpbslide_presq[n];
+
while (s--)
mpbsqrmod_w(b, size, result, result, wksp);
-
+
mpbmulmod_w(b, size, result, size, slide+mpbslide_mulg[n]*size, result, wksp);
-
+
s = mpbslide_postsq[n];
-
+
while (s--)
mpbsqrmod_w(b, size, result, result, wksp);
}
}
}
-/**
+/*
* mpbtwopowmod_w
* needs workspace of (4*size+2) words
*/
/* if temp is still zero, then we're trying to raise x to power zero, and result stays one */
if (temp)
{
- register unsigned int count = MP_WBITS;
+ register int count = MP_WBITS;
/* first skip bits until we reach a one */
while (count)
{
/* always square */
mpbsqrmod_w(b, size, result, result, wksp);
-
+
/* multiply by two if bit is 1 */
if (temp & MP_MSBMASK)
{
if (mpadd(size, result, result) || mpge(size, result, b->modl))
{
/* there was carry, or the result is greater than the modulus, so we need to adjust */
- (void) mpsub(size, result, b->modl);
+ mpsub(size, result, b->modl);
}
}
}
}
-#ifdef DYING
-/*@unchecked@*/
-static int _debug = 0;
-
-#undef FULL_BINARY_EXTENDED_GCD
-
-/**
- * Computes the inverse (modulo b) of x, and returns 1 if x was invertible.
- */
-int mpbinv_w(const mpbarrett* b, size_t xsize, const mpw* xdata, mpw* result, mpw* wksp)
-{
- size_t ysize = b->size+1;
- int k;
- mpw* u = wksp;
- mpw* v = u+ysize;
- mpw* u1 = v+ysize;
- mpw* v1 = u1+ysize;
- mpw* t1 = v1+ysize;
- mpw* u3 = t1+ysize;
- mpw* v3 = u3+ysize;
- mpw* t3 = v3+ysize;
-
-#ifdef FULL_BINARY_EXTENDED_GCD
- mpw* u2 = t3+ysize;
- mpw* v2 = u2+ysize;
- mpw* t2 = v2+ysize;
-#endif
-
- mpsetx(ysize, u, xsize, xdata);
- mpsetx(ysize, v, b->size, b->modl);
-
- /* Y1. Find power of 2. */
- for (k = 0; mpeven(ysize, u) && mpeven(ysize, v); k++) {
- mpdivtwo(ysize, u);
- mpdivtwo(ysize, v);
- }
-
- /* Y2. Initialize. */
- mpsetw(ysize, u1, 1);
- mpsetx(ysize, v1, ysize, v);
- mpsetx(ysize, u3, ysize, u);
- mpsetx(ysize, v3, ysize, v);
-
-#ifdef FULL_BINARY_EXTENDED_GCD
- mpzero(ysize, u2);
- mpsetw(ysize, v2, 1);
- (void) mpsub(ysize, v2, u);
-#endif
-
-if (_debug < 0) {
-/*@-modfilesys@*/
-fprintf(stderr, " u: "), mpfprintln(stderr, ysize, u);
-fprintf(stderr, " v: "), mpfprintln(stderr, ysize, v);
-fprintf(stderr, " u1: "), mpfprintln(stderr, ysize, u1);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " u2: "), mpfprintln(stderr, ysize, u2);
-#endif
-fprintf(stderr, " u3: "), mpfprintln(stderr, ysize, u3);
-fprintf(stderr, " v1: "), mpfprintln(stderr, ysize, v1);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " v2: "), mpfprintln(stderr, ysize, v2);
-#endif
-fprintf(stderr, " v3: "), mpfprintln(stderr, ysize, v3);
-/*@=modfilesys@*/
-}
-
- if (mpodd(ysize, u)) {
- mpzero(ysize, t1);
-#ifdef FULL_BINARY_EXTENDED_GCD
- mpzero(ysize, t2);
- mpsubw(ysize, t2, 1);
-#endif
- mpzero(ysize, t3);
- (void) mpsub(ysize, t3, v);
- goto Y4;
- } else {
- mpsetw(ysize, t1, 1);
-#ifdef FULL_BINARY_EXTENDED_GCD
- mpzero(ysize, t2);
-#endif
- mpsetx(ysize, t3, ysize, u);
- }
-
- do {
- do {
-#ifdef FULL_BINARY_EXTENDED_GCD
- if (mpodd(ysize, t1) || mpodd(ysize, t2)) {
- (void) mpadd(ysize, t1, v);
- (void) mpsub(ysize, t2, u);
- }
-#else
- /* XXX this assumes v is odd, true for DSA inversion. */
- if (mpodd(ysize, t1))
- (void) mpadd(ysize, t1, v);
-#endif
-
- mpsdivtwo(ysize, t1);
-#ifdef FULL_BINARY_EXTENDED_GCD
- mpsdivtwo(ysize, t2);
-#endif
- mpsdivtwo(ysize, t3);
-Y4:
-if (_debug < 0) {
-/*@-modfilesys@*/
-fprintf(stderr, "-->Y4 t3: "), mpfprintln(stderr, ysize, t3);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " t2: "), mpfprintln(stderr, ysize, t2);
-#endif
-fprintf(stderr, " t1: "), mpfprintln(stderr, ysize, t1);
-/*@=modfilesys@*/
-}
- } while (mpeven(ysize, t3));
-
- /* Y5. Reset max(u3,v3). */
- if (!(*t3 & MP_MSBMASK)) {
- mpsetx(ysize, u1, ysize, t1);
-#ifdef FULL_BINARY_EXTENDED_GCD
- mpsetx(ysize, u2, ysize, t2);
-#endif
- mpsetx(ysize, u3, ysize, t3);
-if (_debug < 0) {
-/*@-modfilesys@*/
-fprintf(stderr, "-->Y5 u1: "), mpfprintln(stderr, ysize, u1);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " u2: "), mpfprintln(stderr, ysize, u2);
-#endif
-fprintf(stderr, " u3: "), mpfprintln(stderr, ysize, u3);
-/*@=modfilesys@*/
-}
- } else {
- mpsetx(ysize, v1, ysize, v);
- (void) mpsub(ysize, v1, t1);
-#ifdef FULL_BINARY_EXTENDED_GCD
- mpsetx(ysize, v2, ysize, u);
- mpneg(ysize, v2);
- (void) mpsub(ysize, v2, t2);
-#endif
- mpzero(ysize, v3);
- (void) mpsub(ysize, v3, t3);
-if (_debug < 0) {
-/*@-modfilesys@*/
-fprintf(stderr, "-->Y5 v1: "), mpfprintln(stderr, ysize, v1);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " v2: "), mpfprintln(stderr, ysize, v2);
-#endif
-fprintf(stderr, " v3: "), mpfprintln(stderr, ysize, v3);
-/*@=modfilesys@*/
-}
- }
-
- /* Y6. Subtract. */
- mpsetx(ysize, t1, ysize, u1);
- (void) mpsub(ysize, t1, v1);
-#ifdef FULL_BINARY_EXTENDED_GCD
- mpsetx(ysize, t2, ysize, u2);
- (void) mpsub(ysize, t2, v2);
-#endif
- mpsetx(ysize, t3, ysize, u3);
- (void) mpsub(ysize, t3, v3);
-
- if (*t1 & MP_MSBMASK) {
- (void) mpadd(ysize, t1, v);
-#ifdef FULL_BINARY_EXTENDED_GCD
- (void) mpsub(ysize, t2, u);
-#endif
- }
-
-if (_debug < 0) {
-/*@-modfilesys@*/
-fprintf(stderr, "-->Y6 t1: "), mpfprintln(stderr, ysize, t1);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " t2: "), mpfprintln(stderr, ysize, t2);
-#endif
-fprintf(stderr, " t3: "), mpfprintln(stderr, ysize, t3);
-/*@=modfilesys@*/
-}
-
- } while (mpnz(ysize, t3));
-
- if (!mpisone(ysize, u3) || !mpisone(ysize, v3))
- return 0;
-
- if (result) {
- while (--k > 0)
- (void) mpadd(ysize, u1, u1);
- mpsetx(b->size, result, ysize, u1);
- }
-
-if (_debug) {
-/*@-modfilesys@*/
-if (result)
-fprintf(stderr, "=== EXIT: "), mpfprintln(stderr, b->size, result);
-fprintf(stderr, " u1: "), mpfprintln(stderr, ysize, u1);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " u2: "), mpfprintln(stderr, ysize, u2);
-#endif
-fprintf(stderr, " u3: "), mpfprintln(stderr, ysize, u3);
-fprintf(stderr, " v1: "), mpfprintln(stderr, ysize, v1);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " v2: "), mpfprintln(stderr, ysize, v2);
-#endif
-fprintf(stderr, " v3: "), mpfprintln(stderr, ysize, v3);
-fprintf(stderr, " t1: "), mpfprintln(stderr, ysize, t1);
-#ifdef FULL_BINARY_EXTENDED_GCD
-fprintf(stderr, " t2: "), mpfprintln(stderr, ysize, t2);
-#endif
-fprintf(stderr, " t3: "), mpfprintln(stderr, ysize, t3);
-/*@=modfilesys@*/
-}
-
- return 1;
-}
-
-#endif
-
-/**
+/*
* needs workspace of (7*size+2) words
*/
int mpbpprime_w(const mpbarrett* b, randomGeneratorContext* r, int t, mpw* wksp)
{
/*
* Small prime factor test:
- *
+ *
* Tables in mpspprod contain multi-precision integers with products of small primes
* If the greatest common divisor of this product and the candidate is not one, then
* the candidate has small prime factors, or is a small prime. Neither is acceptable when
* we are looking for large probable primes =)
*
*/
-
+
if (size > SMALL_PRIMES_PRODUCT_MAX)
{
mpsetx(size, wksp+size, SMALL_PRIMES_PRODUCT_MAX, mpspprod[SMALL_PRIMES_PRODUCT_MAX-1]);
- /*@-compdef@*/ /* LCL: wksp+size */
mpgcd_w(size, b->modl, wksp+size, wksp, wksp+2*size);
- /*@=compdef@*/
}
else
{
void mpbnrnd(const mpbarrett* b, randomGeneratorContext* rc, mpnumber* result)
{
register size_t size = b->size;
- register mpw* temp = (mpw*) malloc(size * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc(size * sizeof(mpw));
- assert(temp != NULL);
mpnfree(result);
mpnsize(result, size);
- /*@-usedef@*/ /* result->data unallocated? */
mpbrnd_w(b, rc, result->data, temp);
- /*@=usedef@*/
free(temp);
}
void mpbnmulmod(const mpbarrett* b, const mpnumber* x, const mpnumber* y, mpnumber* result)
{
register size_t size = b->size;
- register mpw* temp = (mpw*) malloc((4*size+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((4*size+2) * sizeof(mpw));
/* xsize and ysize must be <= b->size */
register size_t fill = 2*size-x->size-y->size;
- register mpw* opnd;
-
- assert(temp != NULL);
- opnd = temp + size*2+2;
+ register mpw* opnd = temp+size*2+2;
mpnfree(result);
mpnsize(result, size);
mpzero(fill, opnd);
mpmul(opnd+fill, x->size, x->data, y->size, y->data);
- /*@-usedef -compdef @*/ /* result->data unallocated? */
mpbmod_w(b, opnd, result->data, temp);
- /*@=usedef =compdef @*/
free(temp);
}
void mpbnsqrmod(const mpbarrett* b, const mpnumber* x, mpnumber* result)
{
register size_t size = b->size;
- register mpw* temp = (mpw*) malloc(size * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc(size * sizeof(mpw));
/* xsize must be <= b->size */
register size_t fill = 2*(size-x->size);
- register mpw* opnd;
-
- assert(temp != NULL);
- opnd = temp + size*2+2;
+ register mpw* opnd = temp + size*2+2;
if (fill)
mpzero(fill, opnd);
mpsqr(opnd+fill, x->size, x->data);
mpnsize(result, size);
- /*@-usedef -compdef @*/ /* result->data unallocated? */
mpbmod_w(b, opnd, result->data, temp);
- /*@=usedef =compdef @*/
free(temp);
}
void mpbnpowmod(const mpbarrett* b, const mpnumber* x, const mpnumber* pow, mpnumber* y)
{
register size_t size = b->size;
- register mpw* temp = (mpw*) malloc((4*size+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((4*size+2) * sizeof(mpw));
- assert(temp != NULL);
mpnfree(y);
mpnsize(y, size);
void mpbnpowmodsld(const mpbarrett* b, const mpw* slide, const mpnumber* pow, mpnumber* y)
{
register size_t size = b->size;
- register mpw* temp = (mpw*) malloc((4*size+2) * sizeof(*temp));
+ register mpw* temp = (mpw*) malloc((4*size+2) * sizeof(mpw));
- assert(temp != NULL);
mpnfree(y);
mpnsize(y, size);
- /*@-internalglobs -mods@*/ /* noisy */
mpbpowmodsld_w(b, slide, pow->size, pow->data, y->data, temp);
- /*@=internalglobs =mods@*/
free(temp);
}
+
+size_t mpbbits(const mpbarrett* b)
+{
+ return mpbits(b->size, b->modl);
+}
#ifndef _MPBARRETT_H
#define _MPBARRETT_H
-#include "beecrypt.h"
-#include "mpnumber.h"
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/mpnumber.h"
-typedef struct
+#ifdef __cplusplus
+# include <iostream>
+#endif
+
+#ifdef __cplusplus
+struct BEECRYPTAPI mpbarrett
+#else
+struct _mpbarrett
+#endif
{
size_t size;
-/*@owned@*/
mpw* modl; /* (size) words */
-/*@dependent@*/ /*@null@*/
- mpw* mu; /* (size+1) words */
-} mpbarrett;
+ mpw* mu; /* (size+1) words */
#ifdef __cplusplus
-extern "C" {
+ mpbarrett();
+ mpbarrett(const mpbarrett&);
+ ~mpbarrett();
+
+ const mpbarrett& operator=(const mpbarrett&);
+ bool operator==(const mpbarrett&);
+ bool operator!=(const mpbarrett&);
+
+ void wipe();
+ size_t bitlength() const;
#endif
+};
-/**
- */
+#ifndef __cplusplus
+typedef struct _mpbarrett mpbarrett;
+#else
BEECRYPTAPI
-void mpbzero(/*@out@*/ mpbarrett* b)
- /*@modifies b->size, b->modl, b->mu @*/;
+std::ostream& operator<<(std::ostream&, const mpbarrett&);
+#endif
-/**
- */
-BEECRYPTAPI
-void mpbinit(mpbarrett* b, size_t size)
- /*@modifies b->size, b->modl, b->mu @*/;
+#ifdef __cplusplus
+extern "C" {
+#endif
-/**
- */
BEECRYPTAPI
-void mpbfree(/*@special@*/ mpbarrett* b)
- /*@uses b->size, b->modl @*/
- /*@releases b->modl @*/
- /*@modifies b->size, b->modl, b->mu @*/;
-
-/**
- */
+void mpbzero(mpbarrett*);
BEECRYPTAPI
-void mpbcopy(mpbarrett* b, const mpbarrett* copy)
- /*@modifies b->size, b->modl, b->mu @*/;
-
-/**
- */
+void mpbinit(mpbarrett*, size_t);
BEECRYPTAPI
-void mpbset(mpbarrett* b, size_t size, const mpw* data)
- /*@modifies b->size, b->modl, b->mu @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpbsethex(mpbarrett* b, const char* hex)
- /*@modifies b->size, b->modl, b->mu @*/;
-
-/**
- */
+void mpbfree(mpbarrett*);
BEECRYPTAPI
-void mpbsubone(const mpbarrett* b, mpw* result)
- /*@modifies result @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpbneg(const mpbarrett* b, const mpw* data, mpw* result)
- /*@modifies result @*/;
-
-/**
- */
+void mpbcopy(mpbarrett*, const mpbarrett*);
BEECRYPTAPI
-void mpbmu_w(mpbarrett* b, /*@out@*/ mpw* wksp)
- /*@modifies b->size, b->modl, b->mu, wksp @*/;
+void mpbwipe(mpbarrett*);
-/**
- */
BEECRYPTAPI
-void mpbrnd_w (const mpbarrett* b, randomGeneratorContext* rc, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
+void mpbset(mpbarrett*, size_t, const mpw*);
-/**
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-void mpbrndodd_w(const mpbarrett* b, randomGeneratorContext* rc, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
-/*@=exportlocal@*/
-
-/**
- */
+int mpbsetbin(mpbarrett*, const byte*, size_t);
BEECRYPTAPI
-void mpbrndinv_w(const mpbarrett* b, randomGeneratorContext* rc, /*@out@*/ mpw* result, /*@out@*/ mpw* inverse, /*@out@*/ mpw* wksp)
- /*@modifies result, inverse, wksp @*/;
+int mpbsethex(mpbarrett*, const char*);
-/**
- */
BEECRYPTAPI
-void mpbmod_w(const mpbarrett* b, const mpw* data, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
+void mpbsubone(const mpbarrett*, mpw*);
-/**
- */
BEECRYPTAPI
-void mpbaddmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
+void mpbmu_w(mpbarrett*, mpw*);
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpbsubmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
-
-/**
- */
BEECRYPTAPI
-void mpbmulmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
-
-/**
- */
+void mpbrnd_w (const mpbarrett*, randomGeneratorContext*, mpw*, mpw*);
BEECRYPTAPI
-void mpbsqrmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
-
-/**
- */
+void mpbrndodd_w(const mpbarrett*, randomGeneratorContext*, mpw*, mpw*);
BEECRYPTAPI
-void mpbpowmod_w(const mpbarrett* b, size_t xsize, const mpw* xdata, size_t psize, const mpw* pdata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
+void mpbrndinv_w(const mpbarrett*, randomGeneratorContext*, mpw*, mpw*, mpw*);
-/**
- */
-/*@-exportlocal@*/
BEECRYPTAPI
-void mpbpowmodsld_w(const mpbarrett* b, const mpw* slide, size_t psize, const mpw* pdata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@globals internalState @*/
- /*@modifies result, wksp, internalState @*/;
-/*@=exportlocal@*/
+void mpbneg_w(const mpbarrett*, const mpw*, mpw*);
+BEECRYPTAPI
+void mpbmod_w(const mpbarrett*, const mpw*, mpw*, mpw*);
-/**
- */
BEECRYPTAPI
-void mpbtwopowmod_w(const mpbarrett* b, size_t psize, const mpw* pdata, /*@out@*/ mpw* result, /*@out@*/ mpw* wksp)
- /*@modifies result, wksp @*/;
+void mpbaddmod_w(const mpbarrett*, size_t, const mpw*, size_t, const mpw*, mpw*, mpw*);
+BEECRYPTAPI
+void mpbsubmod_w(const mpbarrett*, size_t, const mpw*, size_t, const mpw*, mpw*, mpw*);
+BEECRYPTAPI
+void mpbmulmod_w(const mpbarrett*, size_t, const mpw*, size_t, const mpw*, mpw*, mpw*);
+BEECRYPTAPI
+void mpbsqrmod_w(const mpbarrett*, size_t, const mpw*, mpw*, mpw*);
+BEECRYPTAPI
+void mpbpowmod_w(const mpbarrett*, size_t, const mpw*, size_t, const mpw*, mpw*, mpw*);
+BEECRYPTAPI
+void mpbpowmodsld_w(const mpbarrett*, const mpw*, size_t, const mpw*, mpw*, mpw*);
+BEECRYPTAPI
+void mpbtwopowmod_w(const mpbarrett*, size_t, const mpw*, mpw*, mpw*);
-#ifdef NOTYET
-/**
- * @todo Simultaneous multiple exponentiation, for use in dsa and elgamal
- * signature verification.
+/* To be added:
+ * simultaneous multiple exponentiation, for use in dsa and elgamal signature verification
*/
-BEECRYPTAPI /*@unused@*/
-void mpbsm2powmod(const mpbarrett* b, const mpw*, const mpw*, const mpw*, const mpw*);
+BEECRYPTAPI
+void mpbsm2powmod(const mpbarrett*, const mpw*, const mpw*, const mpw*, const mpw*);
+BEECRYPTAPI
+void mpbsm3powmod(const mpbarrett*, const mpw*, const mpw*, const mpw*, const mpw*, const mpw*, const mpw*);
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpbsm3powmod(const mpbarrett* b, const mpw*, const mpw*, const mpw*, const mpw*, const mpw*, const mpw*);
-#endif /* NOTYET */
+BEECRYPTAPI
+int mpbpprime_w(const mpbarrett*, randomGeneratorContext*, int, mpw*);
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int mpbpprime_w(const mpbarrett* b, randomGeneratorContext* r, int t, /*@out@*/ mpw* wksp)
- /*@modifies wksp @*/;
+/* the next routines take mpnumbers as parameters */
-/**
- * @note Takes mpnumber as parameter.
- */
BEECRYPTAPI
-void mpbnrnd(const mpbarrett* b, randomGeneratorContext* rc, mpnumber* result)
- /*@modifies result @*/;
-
-/**
- * @note Takes mpnumber as parameter.
- */
-BEECRYPTAPI /*@unused@*/
-void mpbnmulmod(const mpbarrett* b, const mpnumber* x, const mpnumber* y, mpnumber* result)
- /*@modifies result @*/;
+void mpbnrnd(const mpbarrett*, randomGeneratorContext*, mpnumber*);
-/**
- * @note Takes mpnumber as parameter.
- */
-BEECRYPTAPI /*@unused@*/
-void mpbnsqrmod(const mpbarrett* b, const mpnumber* x, mpnumber* result)
- /*@modifies result @*/;
+BEECRYPTAPI
+void mpbnmulmod(const mpbarrett*, const mpnumber*, const mpnumber*, mpnumber*);
+BEECRYPTAPI
+void mpbnsqrmod(const mpbarrett*, const mpnumber*, mpnumber*);
-/**
- * @note Takes mpnumber as parameter.
- */
BEECRYPTAPI
-void mpbnpowmod (const mpbarrett* b, const mpnumber* x, const mpnumber* pow, mpnumber* y)
- /*@modifies y @*/;
+void mpbnpowmod (const mpbarrett*, const mpnumber*, const mpnumber*, mpnumber*);
+BEECRYPTAPI
+void mpbnpowmodsld(const mpbarrett*, const mpw*, const mpnumber*, mpnumber*);
-/**
- * @note Takes mpnumber as parameter.
- */
-BEECRYPTAPI /*@unused@*/
-void mpbnpowmodsld(const mpbarrett* b, const mpw* slide, const mpnumber* pow, mpnumber* y)
- /*@modifies y @*/;
+BEECRYPTAPI
+size_t mpbbits(const mpbarrett*);
#ifdef __cplusplus
}
* \ingroup MP_m
*/
-#include "system.h"
-#include "mpnumber.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/mpnumber.h"
void mpnzero(mpnumber* n)
{
n->data = (mpw*) 0;
}
-/*@-compdef @*/ /* n->data not initialized */
void mpnsize(mpnumber* n, size_t size)
{
if (size)
if (n->data)
{
if (n->size != size)
- n->data = (mpw*) realloc(n->data, size * sizeof(*n->data));
+ {
+ if (size < n->size)
+ {
+ register size_t offset = n->size - size;
+
+ memmove(n->data, n->data + offset, offset * sizeof(mpw));
+ }
+ n->data = (mpw*) realloc(n->data, size * sizeof(mpw));
+ }
}
else
- n->data = (mpw*) malloc(size * sizeof(*n->data));
+ n->data = (mpw*) malloc(size * sizeof(mpw));
- if (n->data)
- n->size = size;
- else
- {
+ if (n->data == (mpw*) 0)
n->size = 0;
- n->data = (mpw*) 0;
- }
+ else
+ n->size = size;
}
else if (n->data)
n->size = 0;
}
}
-/*@=compdef @*/
-/*@-bounds@*/
void mpninit(mpnumber* n, size_t size, const mpw* data)
{
n->size = size;
- if (n->data)
- {
- free(n->data);
- n->data = (mpw*) 0;
- }
- n->data = (mpw*) malloc(size * sizeof(*n->data));
+ n->data = (mpw*) malloc(size * sizeof(mpw));
- if (n->data != (mpw*) 0 && data != (mpw*) 0)
+ if (n->data)
mpcopy(size, n->data, data);
}
-/*@=bounds@*/
void mpnfree(mpnumber* n)
{
void mpnwipe(mpnumber* n)
{
- if (n->data)
+ if (n->data != (mpw*) 0)
mpzero(n->size, n->data);
}
if (n->data)
{
if (n->size != size)
- n->data = (mpw*) realloc(n->data, size * sizeof(*n->data));
+ n->data = (mpw*) realloc(n->data, size * sizeof(mpw));
}
else
- n->data = (mpw*) malloc(size * sizeof(*n->data));
+ n->data = (mpw*) malloc(size * sizeof(mpw));
- if (n->data != (mpw*) 0 && data != (mpw*) 0)
- {
- n->size = size;
- /*@-nullpass@*/ /* data is notnull */
- mpcopy(n->size, n->data, data);
- /*@=nullpass@*/
- }
+ if (n->data)
+ mpcopy(n->size = size, n->data, data);
else
- {
n->size = 0;
- n->data = (mpw*) 0;
- }
}
else if (n->data)
{
if (n->data)
{
if (n->size != 1)
- n->data = (mpw*) realloc(n->data, 1 * sizeof(*n->data));
+ n->data = (mpw*) realloc(n->data, sizeof(mpw));
}
else
- n->data = (mpw*) malloc(1 * sizeof(*n->data));
+ n->data = (mpw*) malloc(sizeof(mpw));
if (n->data)
{
n->data[0] = val;
}
else
- {
n->size = 0;
- n->data = (mpw*) 0;
- }
}
-/*@-usedef @*/ /* n->data may be NULL */
-void mpnsethex(mpnumber* n, const char* hex)
+int mpnsetbin(mpnumber* n, const byte* osdata, size_t ossize)
{
- register size_t len = strlen(hex);
- register size_t size = MP_NIBBLES_TO_WORDS(len + MP_WNIBBLES - 1);
+ int rc = -1;
+ size_t size;
+
+ /* skip zero bytes */
+ while ((*osdata == 0) && ossize)
+ {
+ osdata++;
+ ossize--;
+ }
+
+ size = MP_BYTES_TO_WORDS(ossize + MP_WBYTES - 1);
if (n->data)
{
if (n->size != size)
- n->data = (mpw*) realloc(n->data, size * sizeof(*n->data));
+ n->data = (mpw*) realloc(n->data, size * sizeof(mpw));
}
else
- n->data = (mpw*) malloc(size * sizeof(*n->data));
+ n->data = (mpw*) malloc(size * sizeof(mpw));
if (n->data)
{
n->size = size;
- (void) hs2ip(n->data, size, hex, len);
+ rc = os2ip(n->data, size, osdata, ossize);
}
- else {
+ else
n->size = 0;
- n->data = (mpw*)0;
+
+ return rc;
+}
+
+int mpnsethex(mpnumber* n, const char* hex)
+{
+ int rc = -1;
+ size_t len = strlen(hex);
+ size_t size = MP_NIBBLES_TO_WORDS(len + MP_WNIBBLES - 1);
+
+ if (n->data)
+ {
+ if (n->size != size)
+ n->data = (mpw*) realloc(n->data, size * sizeof(mpw));
+ }
+ else
+ n->data = (mpw*) malloc(size * sizeof(mpw));
+
+ if (n->data)
+ {
+ n->size = size;
+
+ rc = hs2ip(n->data, size, hex, len);
}
+ else
+ n->size = 0;
+
+ return rc;
}
-/*@=usedef @*/
int mpninv(mpnumber* inv, const mpnumber* k, const mpnumber* mod)
{
int rc = 0;
size_t size = mod->size;
- mpw* wksp = (mpw*) malloc((7*size+6) * sizeof(*wksp));
+ mpw* wksp = (mpw*) malloc((7*size+6) * sizeof(mpw));
if (wksp)
{
- mpnzero(inv);
mpnsize(inv, size);
mpsetx(size, wksp, k->size, k->data);
- rc = mpextgcd_w(size, wksp, mod->data, inv->data, wksp+size);
+ rc = mpextgcd_w(size, mod->data, wksp, inv->data, wksp+size);
free(wksp);
}
return rc;
}
+
+size_t mpntrbits(mpnumber* n, size_t bits)
+{
+ size_t sigbits = mpbits(n->size, n->data);
+ size_t offset = 0;
+
+ if (sigbits < bits)
+ {
+ /* no need to truncate */
+ return sigbits;
+ }
+ else
+ {
+ size_t allbits = MP_BITS_TO_WORDS(n->size + MP_WBITS - 1);
+
+ while ((allbits - bits) > MP_WBITS)
+ {
+ /* zero a word */
+ n->data[offset++] = 0;
+ allbits -= MP_WBITS;
+ }
+
+ if ((allbits - bits))
+ {
+ /* mask the next word */
+ n->data[offset] &= (MP_ALLMASK >> (MP_WBITS - bits));
+
+ /* resize the number */
+ mpnsize(n, n->size - offset);
+
+ /* finally return the number of remaining bits */
+ return bits;
+ }
+ else
+ {
+ /* nothing remains */
+ mpnsetw(n, 0);
+ return 0;
+ }
+ }
+}
+
+size_t mpnbits(const mpnumber* n)
+{
+ return mpbits(n->size, n->data);
+}
#ifndef _MPNUMBER_H
#define _MPNUMBER_H
-#include "mp.h"
+#include "beecrypt/mp.h"
-/**
- */
-typedef struct
+#ifdef __cplusplus
+# include <iostream>
+#endif
+
+#ifdef __cplusplus
+struct BEECRYPTAPI mpnumber
+#else
+struct _mpnumber
+#endif
{
size_t size;
-/*@owned@*/ /*@relnull@*/
mpw* data;
-} mpnumber;
#ifdef __cplusplus
-extern "C" {
+ mpnumber();
+ mpnumber(unsigned int);
+ mpnumber(const mpnumber&);
+ ~mpnumber();
+
+ const mpnumber& operator=(const mpnumber&);
+ bool operator==(const mpnumber&);
+ bool operator!=(const mpnumber&);
+
+ void wipe();
+
+ size_t bitlength() const;
#endif
+};
-/**
- */
+#ifndef __cplusplus
+typedef struct _mpnumber mpnumber;
+#else
BEECRYPTAPI
-void mpnzero(/*@out@*/ mpnumber* n)
- /*@modifies n->size, n->data @*/;
-
-/**
- */
+std::ostream& operator<<(std::ostream&, const mpnumber&);
+/*
BEECRYPTAPI
-void mpnsize(mpnumber* n, size_t size)
- /*@modifies n->size, n->data @*/;
+std::istream& operator>>(std::istream&, mpnumber&);
+*/
+#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpninit(mpnumber* n, size_t size, const mpw* data)
- /*@modifies n->size, n->data @*/;
+#ifdef __cplusplus
+extern "C" {
+#endif
-/**
- */
BEECRYPTAPI
-void mpnfree(mpnumber* n)
- /*@modifies n->size, n->data @*/;
-
-/**
- */
+void mpnzero(mpnumber*);
BEECRYPTAPI
-void mpncopy(mpnumber* n, const mpnumber* copy)
- /*@modifies n->size, n->data @*/;
-
-/**
- */
+void mpnsize(mpnumber*, size_t);
+BEECRYPTAPI
+void mpninit(mpnumber*, size_t, const mpw*);
+BEECRYPTAPI
+void mpnfree(mpnumber*);
+BEECRYPTAPI
+void mpncopy(mpnumber*, const mpnumber*);
BEECRYPTAPI
-void mpnwipe(mpnumber* n)
- /*@modifies n->size, n->data @*/;
+void mpnwipe(mpnumber*);
-/**
- */
BEECRYPTAPI
-void mpnset (mpnumber* n, size_t size, /*@null@*/ const mpw* data)
- /*@modifies n->size, n->data @*/;
+void mpnset (mpnumber*, size_t, const mpw*);
+BEECRYPTAPI
+void mpnsetw (mpnumber*, mpw);
-/**
- */
BEECRYPTAPI
-void mpnsetw (mpnumber* n, mpw val)
- /*@modifies n->size, n->data @*/;
+int mpnsetbin(mpnumber*, const byte*, size_t);
+BEECRYPTAPI
+int mpnsethex(mpnumber*, const char*);
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpnsethex(/*@out@*/ mpnumber* n, const char* hex)
- /*@modifies n->size, n->data @*/;
+BEECRYPTAPI
+int mpninv(mpnumber*, const mpnumber*, const mpnumber*);
-/**
+/*!\brief Truncate the mpnumber to the specified number of (least significant) bits.
*/
-BEECRYPTAPI /*@unused@*/
-int mpninv(/*@out@*/ mpnumber* inv, const mpnumber* k, const mpnumber* mod)
- /*@modifies inv->size, inv->data @*/;
+BEECRYPTAPI
+size_t mpntrbits(mpnumber*, size_t);
+BEECRYPTAPI
+size_t mpnbits(const mpnumber*);
#ifdef __cplusplus
}
# define ASM_MPFILL
# define ASM_MPEVEN
# define ASM_MPODD
-# define ASM_MPADDW
-# define ASM_MPSUBW
# define ASM_MPADD
+# define ASM_MPADDW
# define ASM_MPSUB
+# define ASM_MPSUBW
# define ASM_MPMULTWO
# define ASM_MPDIVTWO
# define ASM_MPSETMUL
# define ASM_MPADDSQRTRC
# elif defined(OPTIMIZE_POWERPC) || defined(OPTIMIZE_POWERPC64)
# define ASM_MPSETMUL
-# define ASM_MPADDW
-# define ASM_MPSUBW
# define ASM_MPADD
+# define ASM_MPADDW
# define ASM_MPSUB
+# define ASM_MPSUBW
# define ASM_MPMULTWO
# define ASM_MPADDMUL
# define ASM_MPADDSQRTRC
# define ASM_MPFILL
# define ASM_MPEVEN
# define ASM_MPODD
+# define ASM_MPADD
+# define ASM_MPADDW
+# define ASM_MPSUB
+# define ASM_MPSUBW
+# define ASM_MPDIVTWO
+# define ASM_MPMULTWO
# define ASM_MPSETMUL
# define ASM_MPADDMUL
+# define ASM_MPADDSQRTRC
# endif
#endif
* \ingroup MP_m
*/
-#include "system.h"
-#include "mpprime.h"
-#include "mp.h"
-#include "mpbarrett.h"
-#include "debug.h"
-
-/**
- * A word of explanation here on what these tables accomplish:
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/mpprime.h"
+
+/*
+ * A word of explanation here on what this table accomplishes:
*
* For fast checking whether a candidate prime can be divided by small primes, we use this table,
* which contains the products of all small primes starting at 3, up to a word size equal to the size
#if (MP_WBITS == 64)
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_01[] = /* primes 3 to 53 */
{ 0xe221f97c30e94e1dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_02[] = /* primes 3 to 101 */
{ 0x5797d47c51681549U, 0xd734e4fc4c3eaf7fU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_03[] = /* primes 3 to 149 */
{ 0x1e6d8e2a0ffceafbU, 0xbcbfc14a4c3bc1e1U,
0x009c6a22a0a7adf5U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_04[] = /* primes 3 to 193 */
{ 0xdbf05b6f5654b3c0U, 0xf524355143958688U,
0x9f155887819aed2aU, 0xc05b93352be98677U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_05[] = /* primes 3 to 239 */
{ 0x3faa5dadb695ce58U, 0x4a579328eab20f1fU,
0xef00fe27ffc36456U, 0x0a65723e27d8884aU,
0xd59da0a992f77529U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_06[] = /* primes 3 to 281 */
{ 0x501201cc51a492a5U, 0x44d3900ad4f8b32aU,
0x203c858406a4457cU, 0xab0b4f805ab18ac6U,
0xeb9572ac6e9394faU, 0x522bffb6f44af2f3U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_07[] = /* primes 3 to 331 */
{ 0x0120eb4d70279230U, 0x9ed122fce0488be4U,
0x1d0c99f5d8c039adU, 0x058c90b4780500feU,
0xf39c05cc09817a27U, 0xc3e1776a246b6af2U,
0x946a10d66eafaedfU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_08[] = /* primes 3 to 379 */
{ 0x106aa9fb7646fa6eU, 0xb0813c28c5d5f09fU,
0x077ec3ba238bfb99U, 0xc1b631a203e81187U,
0x233db117cbc38405U, 0x6ef04659a4a11de4U,
0x9f7ecb29bada8f98U, 0x0decece92e30c48fU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_09[] = /* primes 3 to 421 */
{ 0x0185dbeb2b8b11d3U, 0x7633e9dc1eec5415U,
0x65c6ce8431d227eeU, 0x28f0328a60c90118U,
0xf35e974579072ec8U, 0xcaf1ac8eefd5566fU,
0xa15fb94fe34f5d37U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_10[] = /* primes 3 to 463 */
{ 0x833a505cf9922beeU, 0xc80265a6d50e1cceU,
0xa22f6fec2eb84450U, 0xcec64a3c0e10d472U,
0x5e21023267bda426U, 0x738730cfb8e6e2aeU,
0xc08c9d4bd2420066U, 0xdccf95ef49a560b7U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_11[] = /* primes 3 to 509 */
{ 0x309d024bd5380319U, 0x2ca334690bafb43aU,
0x0abd5840fbeb24d1U, 0xf49b633047902baeU,
0x8ffd0db8e8fa61a1U, 0x6e1c0970beb81adcU,
0xf49c82dff960d36fU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_12[] = /* primes 3 to 569 */
{ 0x25eac89f8d4da338U, 0x337b49850d2d1489U,
0x2663177b4010af3dU, 0xd23eeb0b228f3832U,
0x93c158c1a9a8227fU, 0xf81a90c5630e9c44U,
0x845c755c7df35a7dU, 0x430c679a11575655U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_13[] = /* primes 3 to 607 */
{ 0x3383219d26454f06U, 0xe2789b7f9c3b940eU,
0x03be2105798e3ff7U, 0x945bd325997bc262U,
0xde195be86e66ba89U, 0xb0ab042d3276976cU,
0x3dbeb3d7413ea96dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_14[] = /* primes 3 to 647 */
{ 0x6e02645460adbd18U, 0xcd52ce1a1beab1c0U,
0x36e468e9f350d69bU, 0x1d357d083a59f778U,
0xc74d951db361f061U, 0xc4d14f000d806db4U,
0xcd939110c7cab492U, 0x2f3ea4c4852ca469U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_15[] = /* primes 3 to 683 */
{ 0x008723131f66758aU, 0x414bbebb2f8670bfU,
0x01dc959d74468901U, 0x57c57f40e210c9c2U,
0xe61b766ec0943254U, 0x1cd70f0fd5a0ce6bU,
0x8ab998fb8ab36e0dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_16[] = /* primes 3 to 739 */
{ 0x02c85ff870f24be8U, 0x0f62b1ba6c20bd72U,
0xb837efdf121206d8U, 0x7db56b7d69fa4c02U,
0x35bbb6e5dae2783dU, 0xd1c0ce7dec4fc70eU,
0x5186d411df36368fU, 0x061aa36011f30179U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_17[] = /* primes 3 to 787 */
{ 0x16af5c18a2bef8efU, 0xf2278332182d0fbfU,
0x0038cc205148b83dU, 0x06e3d7d932828b18U,
0xb0cfbf964c8f27ceU, 0x05d6c77a01f9d332U,
0x36c9d442ad69ed33U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_18[] = /* primes 3 to 827 */
{ 0x005bfd2583ab7a44U, 0x13d4df0f537c686cU,
0xa8e6b583e491130eU, 0x96dfcc1c05ba298fU,
0x9513a9cbe3e67e3aU, 0xe501c1c522aa8ba9U,
0xf955789589161febU, 0xc69941a147aa9685U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_19[] = /* primes 3 to 877 */
{ 0x06706918e8355b7fU, 0xfd3f024da6b012e2U,
0xbb7338f30d51a968U, 0x0f3d912035ed70e0U,
0xe85d8e9434a37006U, 0x8cebc96060ab2f87U,
0x81efeb182d0e724bU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_20[] = /* primes 3 to 929 */
{ 0xa9e9591f7815617eU, 0xcabe352fa13445c4U,
0xf8e319ba63042e1cU, 0xb0a017d0e729a699U,
0x30b96bfb6475393bU, 0x5f43a549d95c5619U,
0x7e274850ad1a6d18U, 0xb5eaa41dd42fda55U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_21[] = /* primes 3 to 971 */
{ 0x06e1d136cb78cac5U, 0x4da4bfcb6f2c4a24U,
0xfcf3796b77719c31U, 0xd27915860001f03eU,
0x0d57d0f076647b0aU, 0xb191f543dc08c392U,
0x3167e5ee56c66847U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_22[] = /* primes 3 to 1013 */
{ 0x005ca1a92edd0e81U, 0x9619289e1ecfe2d7U,
0xf3949eaf363a5fe8U, 0xf6fee01ccd480490U,
0x5b7138fc36f7989cU, 0xe85b07c2d4d59d42U,
0x1541c765f6c2111dU, 0xb82eca06b437f757U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_23[] = /* primes 3 to 1051 */
{ 0x18e5b310229f618dU, 0xe0f54782f57fff33U,
0x10546ba8efc0a69cU, 0xac4b573b749cc43dU,
0x531bccbf17e3c78dU, 0x5c43d8f6866ad640U,
0xfdbbba0fe997b27bU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_24[] = /* primes 3 to 1093 */
{ 0x021bf9497091b8c3U, 0x68cc7c8e00c1990cU,
0x6027481b79215ac8U, 0xa7517749a2151377U,
0x7dfb5c9c8ada77cdU, 0x0d5b94eff021e02eU,
0x307d08010312d57cU, 0xb5d975764697842dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_25[] = /* primes 3 to 1151 */
{ 0xfa1bd62baae1e767U, 0x47535af3830fc07dU,
0xebcf3ef7e5a8e46bU, 0x8937c4afe02aef0aU,
0x138b42a3c1d9593cU, 0xe1254fb3214d2b08U,
0x52532bc528bc6467U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_26[] = /* primes 3 to 1193 */
{ 0x239afcd438799705U, 0xab8a0cda4802bc8fU,
0xb0e87f44a568f618U, 0x7c604708dfb79072U,
0x66aa84bf84d4448dU, 0x2119029166db27bdU,
0x515599cdcd147810U, 0x3acf73e7fe62aed9U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_27[] = /* primes 3 to 1231 */
{ 0x0654f0d4cdacb307U, 0x5419612fae3cf746U,
0xfbab751fd0887955U, 0x28adc68d26f32877U,
0x55e0d645628c5475U, 0x6217c0bdf119900bU,
0x05ea71dd714fd2c9U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_28[] = /* primes 3 to 1283 */
{ 0x01662c66dab7a4faU, 0xdba4265ac2075912U,
0x59e9c885e1330cb6U, 0xc91bee92f1b334ffU,
0x4548a05562ed1c09U, 0x1a63309bf1a9df8bU,
0xf0c59af912a62c22U, 0xe1e1f49bb0115c17U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_29[] = /* primes 3 to 1307 */
{ 0x005cda0c54b07f4fU, 0xff0caca07cc89b95U,
0x1c021191164be693U, 0x6665357ebb2f689cU,
0xd052c10abfc67bf6U, 0x915d44352688091bU,
0x1eb1c7117c91eae5U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_30[] = /* primes 3 to 1381 */
{ 0xa0604bc54c251adeU, 0xcf22bf075a150bb1U,
0x2a67d65a5045c183U, 0x172466270d72a8c6U,
0xca98bda05c0c6ac6U, 0x666daad014d2ff3fU,
0x7138fa68ddd5e9f0U, 0xe92edcaa62b56483U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_31[] = /* primes 3 to 1433 */
{ 0x4742fdaff7e8231aU, 0xded6827758493423U,
0x12b13d2f5925c539U, 0x82d876ef7ff69e7fU,
0x177c5dc0fbfbb491U, 0xa1e5e03e5715875cU,
0xa02a0fa41fde7abdU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_32[] = /* primes 3 to 1471 */
{ 0x2465a7bd85011e1cU, 0x9e0527929fff268cU,
0x82ef7efa416863baU, 0xa5acdb0971dba0ccU,
#elif (MP_WBITS == 32)
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_01[] = /* primes 3 to 29 */
{ 0xc0cfd797U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_02[] = /* primes 3 to 53 */
{ 0xe221f97cU, 0x30e94e1dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_03[] = /* primes 3 to 73 */
{ 0x41cd66acU, 0xc237b226U, 0x81a18067U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_04[] = /* primes 3 to 101 */
{ 0x5797d47cU, 0x51681549U, 0xd734e4fcU, 0x4c3eaf7fU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_05[] = /* primes 3 to 113 */
{ 0x02c4b8d0U, 0xd2e0d937U, 0x3935200fU, 0xb49be231U,
0x5ce1a307U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_06[] = /* primes 3 to 149 */
{ 0x1e6d8e2aU, 0x0ffceafbU, 0xbcbfc14aU, 0x4c3bc1e1U,
0x009c6a22U, 0xa0a7adf5U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_07[] = /* primes 3 to 167 */
{ 0x049265d3U, 0x574cefd0U, 0x4229bfd6U, 0x62a4a46fU,
0x8611ed02U, 0x26c655f0U, 0x76ebade3U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_08[] = /* primes 3 to 193 */
{ 0xdbf05b6fU, 0x5654b3c0U, 0xf5243551U, 0x43958688U,
0x9f155887U, 0x819aed2aU, 0xc05b9335U, 0x2be98677U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_09[] = /* primes 3 to 223 */
{ 0x5e75cec8U, 0xb5de5ea1U, 0x5da8302aU, 0x2f28b4adU,
0x2735bdc3U, 0x9344c52eU, 0x67570925U, 0x6feb71efU,
0x6811d741U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_10[] = /* primes 3 to 239 */
{ 0x3faa5dadU, 0xb695ce58U, 0x4a579328U, 0xeab20f1fU,
0xef00fe27U, 0xffc36456U, 0x0a65723eU, 0x27d8884aU,
0xd59da0a9U, 0x92f77529U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_11[] = /* primes 3 to 263 */
{ 0x3c9b6e49U, 0xb7cf685bU, 0xe7f3a239U, 0xfb4084cbU,
0x166885e3U, 0x9d4f65b4U, 0x0bb0e51cU, 0x0a5d36feU,
0x98c32069U, 0xfd5c441cU, 0x6d82f115U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_12[] = /* primes 3 to 281 */
{ 0x501201ccU, 0x51a492a5U, 0x44d3900aU, 0xd4f8b32aU,
0x203c8584U, 0x06a4457cU, 0xab0b4f80U, 0x5ab18ac6U,
0xeb9572acU, 0x6e9394faU, 0x522bffb6U, 0xf44af2f3U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_13[] = /* primes 3 to 311 */
{ 0x9397b5b4U, 0x414dc331U, 0x04561364U, 0x79958cc8U,
0xfd5ea01fU, 0x5d5e9f61U, 0xbd0f1cb6U, 0x24af7e6aU,
0x3284dbb2U, 0x9857622bU, 0x8be980a6U, 0x5456a5c1U,
0xed928009U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_14[] = /* primes 3 to 331 */
{ 0x0120eb4dU, 0x70279230U, 0x9ed122fcU, 0xe0488be4U,
0x1d0c99f5U, 0xd8c039adU, 0x058c90b4U, 0x780500feU,
0xf39c05ccU, 0x09817a27U, 0xc3e1776aU, 0x246b6af2U,
0x946a10d6U, 0x6eafaedfU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_15[] = /* primes 3 to 353 */
{ 0x03c91dd1U, 0x2e893191U, 0x94095649U, 0x874b41d6U,
0x05810c06U, 0x195d70ebU, 0xbd54a862U, 0x50c52733U,
0x06dc6648U, 0x1c251ca4U, 0xa02c9a04U, 0x78c96f0dU,
0x02f0db0bU, 0x39d624caU, 0x0b0441c1U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_16[] = /* primes 3 to 379 */
{ 0x106aa9fbU, 0x7646fa6eU, 0xb0813c28U, 0xc5d5f09fU,
0x077ec3baU, 0x238bfb99U, 0xc1b631a2U, 0x03e81187U,
0x233db117U, 0xcbc38405U, 0x6ef04659U, 0xa4a11de4U,
0x9f7ecb29U, 0xbada8f98U, 0x0decece9U, 0x2e30c48fU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_17[] = /* primes 3 to 401 */
{ 0x5aa88d8cU, 0x594bb372U, 0xc4bc813fU, 0x4a87a266U,
0x1f984840U, 0xdab15692U, 0x2c2a177dU, 0x95843665U,
0x3b3536a4U, 0x0b2745bdU, 0xadf1a6c9U, 0x7b23e85aU,
0xdc6695c1U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_18[] = /* primes 3 to 421 */
{ 0x0185dbebU, 0x2b8b11d3U, 0x7633e9dcU, 0x1eec5415U,
0x65c6ce84U, 0x31d227eeU, 0x28f0328aU, 0x60c90118U,
0xf35e9745U, 0x79072ec8U, 0xcaf1ac8eU, 0xefd5566fU,
0xa15fb94fU, 0xe34f5d37U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_19[] = /* primes 3 to 443 */
{ 0x0cde6fd1U, 0xcf108066U, 0xcc548df9U, 0x070e102cU,
0x2c651b88U, 0x5f24f503U, 0xaaffe276U, 0xfeb57311U,
0xc43f999dU, 0x5d06b89fU, 0xcb22e533U, 0x5a9287bcU,
0x6d75a3e9U, 0x1e53906dU, 0x413163d5U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_20[] = /* primes 3 to 463 */
{ 0x833a505cU, 0xf9922beeU, 0xc80265a6U, 0xd50e1cceU,
0xa22f6fecU, 0x2eb84450U, 0xcec64a3cU, 0x0e10d472U,
0x5e210232U, 0x67bda426U, 0x738730cfU, 0xb8e6e2aeU,
0xc08c9d4bU, 0xd2420066U, 0xdccf95efU, 0x49a560b7U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_21[] = /* primes 3 to 487 */
{ 0x035417f1U, 0xe321c06cU, 0xbe32ffceU, 0xae752cc9U,
0xa9fe11a6U, 0x3d94c946U, 0x456edd7dU, 0x5a060de1U,
0x491cbd61U, 0x55e565afU, 0x4a9f4331U, 0x0adbb0d7U,
0x06e86f6dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_22[] = /* primes 3 to 509 */
{ 0x309d024bU, 0xd5380319U, 0x2ca33469U, 0x0bafb43aU,
0x0abd5840U, 0xfbeb24d1U, 0xf49b6330U, 0x47902baeU,
0x8ffd0db8U, 0xe8fa61a1U, 0x6e1c0970U, 0xbeb81adcU,
0xf49c82dfU, 0xf960d36fU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_23[] = /* primes 3 to 541 */
{ 0x01ab244aU, 0x33bc047eU, 0x804590b4U, 0xc3207237U,
0xea503fa0U, 0x7541b251U, 0x57cfd03fU, 0xf602c9d0U,
0xb6a5129cU, 0x7699fb5cU, 0xccec6d45U, 0x56c9b8eaU,
0xfa05897cU, 0xb8c5cf72U, 0xb77603d9U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_24[] = /* primes 3 to 569 */
{ 0x25eac89fU, 0x8d4da338U, 0x337b4985U, 0x0d2d1489U,
0x2663177bU, 0x4010af3dU, 0xd23eeb0bU, 0x228f3832U,
0x93c158c1U, 0xa9a8227fU, 0xf81a90c5U, 0x630e9c44U,
0x845c755cU, 0x7df35a7dU, 0x430c679aU, 0x11575655U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_25[] = /* primes 3 to 587 */
{ 0x01b515a8U, 0xdca3d6e4U, 0x69090373U, 0x84febfe8U,
0xf32e06cfU, 0x9bde8c89U, 0x6b3f992fU, 0x2ff23508U,
0x6b3faafcU, 0x0f200b35U, 0x7485ce4aU, 0x2f08f148U,
0xcce6887dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_26[] = /* primes 3 to 607 */
{ 0x3383219dU, 0x26454f06U, 0xe2789b7fU, 0x9c3b940eU,
0x03be2105U, 0x798e3ff7U, 0x945bd325U, 0x997bc262U,
0xde195be8U, 0x6e66ba89U, 0xb0ab042dU, 0x3276976cU,
0x3dbeb3d7U, 0x413ea96dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_27[] = /* primes 3 to 619 */
{ 0x02ced4b7U, 0xf15179e8U, 0x7fcba6daU, 0x7b07a6f3U,
0xf9311218U, 0xa7b88985U, 0xac74b503U, 0xbf745330U,
0x80751585U, 0xc70e20c2U, 0x2d15d3feU, 0xc1b40c7fU,
0x8e25dd07U, 0xdb09dd86U, 0x791aa9e3U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_28[] = /* primes 3 to 647 */
{ 0x6e026454U, 0x60adbd18U, 0xcd52ce1aU, 0x1beab1c0U,
0x36e468e9U, 0xf350d69bU, 0x1d357d08U, 0x3a59f778U,
0xc74d951dU, 0xb361f061U, 0xc4d14f00U, 0x0d806db4U,
0xcd939110U, 0xc7cab492U, 0x2f3ea4c4U, 0x852ca469U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_29[] = /* primes 3 to 661 */
{ 0x074921f7U, 0x6a76cec3U, 0xaeb05f74U, 0x60b21f16U,
0x49dece2fU, 0x21bb3ed9U, 0xe4cb4ebcU, 0x05d6f408U,
0xc7001c45U, 0x4a84a45dU, 0x66007591U, 0x27e85693U,
0x2288d0fbU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_30[] = /* primes 3 to 683 */
{ 0x00872313U, 0x1f66758aU, 0x414bbebbU, 0x2f8670bfU,
0x01dc959dU, 0x74468901U, 0x57c57f40U, 0xe210c9c2U,
0xe61b766eU, 0xc0943254U, 0x1cd70f0fU, 0xd5a0ce6bU,
0x8ab998fbU, 0x8ab36e0dU };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_31[] = /* primes 3 to 719 */
{ 0x1e595df4U, 0x3064a8c9U, 0xd61ae17bU, 0xde1938f0U,
0x22ee6357U, 0x35f4caddU, 0x3d39f473U, 0xafed7df5U,
0x20969ec0U, 0x1a480d31U, 0x331b3252U, 0x01b36fabU,
0x3d5b415bU, 0x1a4567e7U, 0x3baf6389U };
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static mpw spp_32[] = /* primes 3 to 739 */
{ 0x02c85ff8U, 0x70f24be8U, 0x0f62b1baU, 0x6c20bd72U,
0xb837efdfU, 0x121206d8U, 0x7db56b7dU, 0x69fa4c02U,
return 35;
}
-/**
+/*
+ * needs workspace of (size*2) words
*/
-static void mpprndbits(mpbarrett* p, size_t msbclr, size_t lsbset, randomGeneratorContext* rc)
- /*@modifies p @*/
+static void mpprndbits(mpbarrett* p, size_t bits, size_t lsbset, const mpnumber* min, const mpnumber* max, randomGeneratorContext* rc, mpw* wksp)
{
register size_t size = p->size;
+ register size_t msbclr = MP_WORDS_TO_BITS(size) - bits;
- if (p == (mpbarrett*) 0 || p->modl == (mpw*) 0)
- return;
+ /* assume that mpbits(max) == bits */
+ /* calculate k=max-min; generate q such that 0 <= q <= k; then set p = q + min */
+ /* for the second step, set the appropriate number of bits */
-/*@-noeffectuncon@*/
- (void) rc->rng->next(rc->param, (byte*) p->modl, MP_WORDS_TO_BYTES(size));
-/*@=noeffectuncon@*/
+ if (max)
+ {
+ mpsetx(size, wksp, max->size, max->data);
+ }
+ else
+ {
+ mpfill(size, wksp, MP_ALLMASK);
+ wksp[0] &= (MP_ALLMASK >> msbclr);
+ }
+ if (min)
+ {
+ mpsetx(size, wksp+size, min->size, min->data);
+ }
+ else
+ {
+ mpzero(size, wksp+size);
+ wksp[size] |= (MP_MSBMASK >> msbclr);
+ }
+
+ mpsub(size, wksp, wksp+size);
- if (msbclr != 0)
- p->modl[0] &= (MP_ALLMASK >> msbclr);
+ rc->rng->next(rc->param, (byte*) p->modl, MP_WORDS_TO_BYTES(size));
- p->modl[0] |= (MP_MSBMASK >> msbclr);
+ p->modl[0] &= (MP_ALLMASK >> msbclr);
- if (lsbset != 0)
+ while (mpgt(size, p->modl, wksp))
+ mpsub(size, p->modl, wksp);
+
+ mpadd(size, p->modl, wksp+size);
+
+ if (lsbset)
p->modl[size-1] |= (MP_ALLMASK >> (MP_WBITS - lsbset));
}
-/**
+/*
* mppsppdiv_w
* needs workspace of (3*size) words
*/
-static
-int mppsppdiv_w(const mpbarrett* p, /*@out@*/ mpw* wksp)
- /*@globals mpspprod @*/
- /*@modifies wksp @*/
+int mppsppdiv_w(const mpbarrett* p, mpw* wksp)
{
/* small prime product trial division test */
register size_t size = p->size;
if (size > SMALL_PRIMES_PRODUCT_MAX)
{
mpsetx(size, wksp+size, SMALL_PRIMES_PRODUCT_MAX, mpspprod[SMALL_PRIMES_PRODUCT_MAX-1]);
- /*@-compdef@*/ /* LCL: wksp+size undef */
mpgcd_w(size, p->modl, wksp+size, wksp, wksp+2*size);
- /*@=compdef@*/
}
else
{
return mpisone(size, wksp);
}
-/**
- * mppmilrabtwo_w
+/*
* needs workspace of (5*size+2)
*/
-static
-int mppmilrabtwo_w(const mpbarrett* p, int s, const mpw* rdata, const mpw* ndata, /*@out@*/ mpw* wksp)
- /*@modifies wksp @*/
+int mppmilrabtwo_w(const mpbarrett* p, int s, const mpw* rdata, const mpw* ndata, mpw* wksp)
{
register size_t size = p->size;
register int j = 0;
}
}
-/**
- * mppmilraba_w
+/*
* needs workspace of (5*size+2) words
*/
-static
-int mppmilraba_w(const mpbarrett* p, const mpw* adata, int s, const mpw* rdata, const mpw* ndata, /*@out@*/ mpw* wksp)
- /*@modifies wksp @*/
+int mppmilraba_w(const mpbarrett* p, const mpw* adata, int s, const mpw* rdata, const mpw* ndata, mpw* wksp)
{
register size_t size = p->size;
register int j = 0;
}
}
-/**
+/*
* needs workspace of (8*size+2) words
*/
int mppmilrab_w(const mpbarrett* p, randomGeneratorContext* rc, int t, mpw* wksp)
int s;
mpcopy(size, ndata, p->modl);
- (void) mpsubw(size, ndata, 1);
+ mpsubw(size, ndata, 1);
mpcopy(size, rdata, ndata);
s = mprshiftlsz(size, rdata); /* we've split p-1 into (2^s)*r */
return 1;
}
-/**
+/*
* needs workspace of (8*size+2) words
*/
-void mpprnd_w(mpbarrett* p, randomGeneratorContext* rc, size_t bits, int t, const mpnumber* f, mpw* wksp)
+int mpprnd_w(mpbarrett* p, randomGeneratorContext* rc, size_t bits, int t, const mpnumber* f, mpw* wksp)
+{
+ return mpprndr_w(p, rc, bits, t, (const mpnumber*) 0, (const mpnumber*) 0, f, wksp);
+}
+
+/*
+ * implements IEEE P1363 A.15.6
+ *
+ * f, min, max are optional
+ */
+int mpprndr_w(mpbarrett* p, randomGeneratorContext* rc, size_t bits, int t, const mpnumber* min, const mpnumber* max, const mpnumber* f, mpw* wksp)
{
/*
* Generate a prime into p with the requested number of bits
*
* Conditions: size(f) <= size(p)
*
+ * Optional input min: if min is not null, then search p so that min <= p
+ * Optional input max: if max is not null, then search p so that p <= max
* Optional input f: if f is not null, then search p so that GCD(p-1,f) = 1
*/
size_t size = MP_BITS_TO_WORDS(bits + MP_WBITS - 1);
+ /* if min has more bits than what was requested for p, bail out */
+ if (min && (mpbits(min->size, min->data) > bits))
+ return -1;
+
+ /* if max has a different number of bits than what was requested for p, bail out */
+ if (max && (mpbits(max->size, max->data) != bits))
+ return -1;
+
+ /* if min is not less than max, bail out */
+ if (min && max && mpgex(min->size, min->data, max->size, max->data))
+ return -1;
+
mpbinit(p, size);
- if (p->modl != (mpw*) 0)
+ if (p->modl)
{
while (1)
{
* Generate a random appropriate candidate prime, and test
* it with small prime divisor test BEFORE computing mu
*/
- mpprndbits(p, MP_WORDS_TO_BITS(size) - bits, 1, rc);
+ mpprndbits(p, bits, 1, min, max, rc, wksp);
/* do a small prime product trial division test on p */
if (!mppsppdiv_w(p, wksp))
if (f != (mpnumber*) 0)
{
mpcopy(size, wksp, p->modl);
- (void) mpsubw(size, wksp, 1);
+ mpsubw(size, wksp, 1);
mpsetx(size, wksp+size, f->size, f->data);
mpgcd_w(size, wksp, wksp+size, wksp+2*size, wksp+3*size);
mpbmu_w(p, wksp);
if (mppmilrab_w(p, rc, t, wksp))
- return;
+ return 0;
}
}
+ return -1;
}
-/**
+/*
* needs workspace of (8*size+2) words
*/
void mpprndconone_w(mpbarrett* p, randomGeneratorContext* rc, size_t bits, int t, const mpbarrett* q, const mpnumber* f, mpnumber* r, int cofactor, mpw* wksp)
while (1)
{
- mpprndbits(&s, MP_WORDS_TO_BITS(s.size) - sbits, 0, rc);
+ mpprndbits(&s, sbits, 0, (mpnumber*) 0, (mpnumber*) 0, rc, wksp);
- /*@-usedef@*/ /* s is set */
if (cofactor == 1)
{
mpsetlsb(s.size, s.modl);
/* s.size + q.size may be greater than p.size by 1, but the product will fit exactly into p */
mpsetx(p->size, p->modl, s.size+q->size, wksp);
/* multiply by two and add 1 */
- (void) mpmultwo(p->size, p->modl);
- (void) mpaddw(p->size, p->modl, 1);
+ mpmultwo(p->size, p->modl);
+ mpaddw(p->size, p->modl, 1);
/* test if the product actually contains enough bits */
if (mpbits(p->size, p->modl) < bits)
continue;
if (f != (mpnumber*) 0)
{
mpcopy(p->size, wksp, p->modl);
- (void) mpsubw(p->size, wksp, 1);
+ mpsubw(p->size, wksp, 1);
mpsetx(p->size, wksp, f->size, f->data);
mpgcd_w(p->size, wksp, wksp+p->size, wksp+2*p->size, wksp+3*p->size);
if (!mpisone(p->size, wksp+2*p->size))
continue;
mpnset(r, s.size, s.modl);
- (void) mpmultwo(r->size, r->data);
+ mpmultwo(r->size, r->data);
mpbfree(&s);
return;
- /*@=usedef@*/
}
}
}
mpbzero(&q);
mpbinit(&q, size);
- /*@-usedef@*/ /* q is set */
while (1)
{
/*
* it with small prime divisor test BEFORE computing mu
*/
- mpprndbits(p, 0, 2, rc);
+ mpprndbits(p, bits, 2, (mpnumber*) 0, (mpnumber*) 0, rc, wksp);
mpcopy(size, q.modl, p->modl);
mpdivtwo(size, q.modl);
return;
}
- /*@=usedef@*/
}
}
#ifndef _MPPRIME_H
#define _MPPRIME_H
-#include "mpbarrett.h"
+#include "beecrypt/mpbarrett.h"
#define SMALL_PRIMES_PRODUCT_MAX 32
-/**
- */
-/*@-exportlocal@*/
-/*@unchecked@*/
extern mpw* mpspprod[SMALL_PRIMES_PRODUCT_MAX];
-/*@=exportlocal@*/
#ifdef __cplusplus
extern "C" {
#endif
-/**
- */
BEECRYPTAPI
-int mpptrials (size_t bits)
- /*@*/;
-
-/**
- */
+int mpptrials (size_t);
BEECRYPTAPI
-int mppmilrab_w (const mpbarrett* p, randomGeneratorContext* rc, int t, /*@out@*/ mpw* wksp)
- /*@modifies wksp @*/;
+int mppmilrab_w (const mpbarrett*, randomGeneratorContext*, int, mpw*);
-/**
- */
BEECRYPTAPI
-void mpprnd_w (mpbarrett* p, randomGeneratorContext* rc, size_t bits, int t, /*@null@*/ const mpnumber* f, /*@out@*/ mpw* wksp)
- /*@globals mpspprod @*/
- /*@modifies p, rc, wksp @*/;
-
-/**
- */
+int mpprnd_w (mpbarrett*, randomGeneratorContext*, size_t, int, const mpnumber*, mpw*);
BEECRYPTAPI
-void mpprndsafe_w (mpbarrett* p, randomGeneratorContext* rc, size_t bits, int t, /*@out@*/ mpw* wksp)
- /*@globals mpspprod @*/
- /*@modifies p, rc, wksp @*/;
-
-#ifdef NOTYET
-/**
- */
-BEECRYPTAPI /*@unused@*/
-void mpprndcon_w (mpbarrett* p, randomGeneratorContext* rc, size_t, int, const mpnumber*, const mpnumber*, const mpnumber*, mpnumber*, /*@out@*/ mpw* wksp)
- /*@modifies wksp @*/;
-#endif
-
-/**
- */
+int mpprndr_w (mpbarrett*, randomGeneratorContext*, size_t, int, const mpnumber*, const mpnumber*, const mpnumber*, mpw*);
+BEECRYPTAPI
+void mpprndsafe_w (mpbarrett*, randomGeneratorContext*, size_t, int, mpw*);
+BEECRYPTAPI
+void mpprndcon_w (mpbarrett*, randomGeneratorContext*, size_t, int, const mpnumber*, const mpnumber*, const mpnumber*, mpnumber*, mpw*);
BEECRYPTAPI
-void mpprndconone_w(mpbarrett* p, randomGeneratorContext* rc, size_t bits, int t, const mpbarrett* q, /*@null@*/ const mpnumber* f, mpnumber* r, int cofactor, /*@out@*/ mpw* wksp)
- /*@globals mpspprod @*/
- /*@modifies p, rc, r, wksp @*/;
+void mpprndconone_w(mpbarrett*, randomGeneratorContext*, size_t, int, const mpbarrett*, const mpnumber*, mpnumber*, int, mpw*);
#ifdef __cplusplus
}
/*
* Copyright (c) 1998, 1999, 2000, 2001 Virtual Unlimited B.V.
*
- * Author: Bob Deblier <bob@virtualunlimited.com>
- *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* Adapted from optimized code by Shawn J. Cokus <cokus@math.washington.edu>
*
* \warning This generator has a very long period, passes statistical test and
- & is very fast, but is not recommended for use in cryptography.
- *
- * \author Bob Deblier <bob@virtualunlimited.com>
+ * is very fast, but is not recommended for use in cryptography.
+ *
+ * \author Bob Deblier <bob.deblier@pandora.be>
* \ingroup PRNG_m
*/
-#include "system.h"
-#include "beecrypt.h"
-#include "mtprng.h"
-#include "mpopt.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/mtprng.h"
#define hiBit(a) ((a) & 0x80000000U)
#define loBit(a) ((a) & 0x1U)
#define loBits(a) ((a) & 0x7FFFFFFFU)
#define mixBits(a, b) (hiBit(a) | loBits(b))
-/*@-sizeoftype@*/
const randomGenerator mtprng = { "Mersenne Twister", sizeof(mtprngParam), (randomGeneratorSetup) mtprngSetup, (randomGeneratorSeed) mtprngSeed, (randomGeneratorNext) mtprngNext, (randomGeneratorCleanup) mtprngCleanup };
-/*@=sizeoftype@*/
-/**
- */
static void mtprngReload(mtprngParam* mp)
- /*@modifies mp @*/
{
register uint32_t *p0 = mp->state;
- register uint32_t *p2=p0+2, *pM = p0+M, s0, s1;
+ register uint32_t *p2 = p0+2, *pM = p0+M, s0, s1;
register int j;
for (s0=mp->state[0], s1=mp->state[1], j=N-M+1; --j; s0=s1, s1=*(p2++))
if (mutex_init(&mp->lock, USYNC_THREAD, (void *) 0))
return -1;
# elif HAVE_PTHREAD_H
- /*@-nullpass@*/
- /*@-moduncon@*/
if (pthread_mutex_init(&mp->lock, (pthread_mutexattr_t *) 0))
return -1;
- /*@=moduncon@*/
- /*@=nullpass@*/
# endif
# endif
#endif
mp->left = 0;
- return entropyGatherNext((byte*)mp->state, sizeof(mp->state));
+ return entropyGatherNext((byte*) mp->state, (N+1) * sizeof(uint32_t));
}
return -1;
}
{
if (mp)
{
- size_t needed = sizeof(mp->state);
- byte* dest = (byte *) mp->state;
+ size_t needed = (N+1) * sizeof(uint32_t);
+ byte* dest = (byte*) mp->state;
#ifdef _REENTRANT
# if WIN32
if (mutex_lock(&mp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_lock(&mp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
if (mutex_unlock(&mp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_unlock(&mp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
if (mutex_lock(&mp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_lock(&mp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
- /*@-branchstate@*/
while (size > 0)
{
if (mp->left == 0)
tmp ^= (tmp >> 18);
mp->left--;
- if (size >= sizeof(tmp))
+ if (size >= 4)
{
- memcpy(data, &tmp, sizeof(tmp));
- size -= sizeof(tmp);
+ memcpy(data, &tmp, 4);
+ size -= 4;
}
else
{
size = 0;
}
}
- /*@=branchstate@*/
#ifdef _REENTRANT
# if WIN32
if (!ReleaseMutex(mp->lock))
if (mutex_unlock(&mp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_unlock(&mp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
if (mutex_destroy(&mp->lock))
return -1;
# elif HAVE_PTHREAD_H
- /*@-moduncon@*/
if (pthread_mutex_destroy(&mp->lock))
return -1;
- /*@=moduncon@*/
# endif
# endif
#endif
/*!\file mtprng.h
* \brief Mersenne Twister pseudo-random number generator, headers.
- * \author Bob Deblier <bob@virtualunlimited.com>
+ * \author Bob Deblier <bob.deblier@pandora.be>
* \ingroup PRNG_m
*/
#ifndef _MTPRNG_H
#define _MTPRNG_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
+
+#ifdef _REENTRANT
+# if WIN32
+# include <windows.h>
+# include <winbase.h>
+# endif
+#endif
#define N 624
#define M 397
#define K 0x9908B0DFU
-/**
+/*
*/
typedef struct
{
#ifdef _REENTRANT
- # if WIN32
- HANDLE lock;
- # else
- bc_lock_t lock;
- # endif
+ bc_mutex_t lock;
#endif
- uint32_t state[N+1];
- uint32_t left;
-/*@kept@*/
- uint32_t* nextw;
+ uint32_t state[N+1];
+ uint32_t left;
+ uint32_t* nextw;
} mtprngParam;
#ifdef __cplusplus
extern "C" {
#endif
-/**
+/*
*/
-/*@observer@*/ /*@checked@*/
extern BEECRYPTAPI const randomGenerator mtprng;
-/**
+/*
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int mtprngSetup (mtprngParam* mp)
- /*@modifies mp @*/;
-/*@=exportlocal@*/
+int mtprngSetup (mtprngParam* mp);
-/**
+/*
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int mtprngSeed (mtprngParam* mp, const byte* data, size_t size)
- /*@modifies mp @*/;
-/*@=exportlocal@*/
+int mtprngSeed (mtprngParam* mp, const byte* data, size_t size);
-/**
+/*
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int mtprngNext (mtprngParam* mp, byte* data, size_t size)
- /*@modifies mp, data @*/;
-/*@=exportlocal@*/
+int mtprngNext (mtprngParam* mp, byte* data, size_t size);
-/**
+/*
*/
-/*@-exportlocal@*/
BEECRYPTAPI
-int mtprngCleanup(mtprngParam* mp)
- /*@modifies mp @*/;
-/*@=exportlocal@*/
+int mtprngCleanup(mtprngParam* mp);
#ifdef __cplusplus
}
+++ /dev/null
-.deps
-.depend
-.depend-done
-.libs
-Makefile
-Makefile.in
-config.cache
-config.guess
-config.log
-config.status
-config.sub
-configure
-libtool
-ltconfig
-ltmain.sh
-*.o
-*.lo
-stamp-h
-stamp-h.in
+++ /dev/null
-#
-# Makefile.am's purpose is to add the Metrowerks CodeWarrior assembler sources to the dist
-#
-# Copyright (c) 2001 Virtual Unlimited B.V.
-#
-# Author: Bob Deblier <bob@virtualunlimited.com>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# 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,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-AUTOMAKE_OPTIONS = gnu no-dependencies
-
-EXTRA_DIST = beecrypt.pch blowfishopt.i586.asm mp32opt.i386.asm sha1opt.i586.asm
+++ /dev/null
-#include <Win32Headers.mch>
-
-#pragma precompile_target "beecrypt.mch"
-
-#define HAVE_CONFIG_H
-#define JAVAGLUE 1
+++ /dev/null
-#
-# blowfishopt.i586.asm
-#
-# Assembler optimized blowfish routines for Intel Pentium processors
-#
-# Compile target is Metrowerks CodeWarrior Pro 5 for Windows
-#
-# Copyright (c) 2000 Virtual Unlimited B.V.
-#
-# Author: Bob Deblier <bob@virtualunlimited.com>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# 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,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-etworounds: .macro p
- xor ecx,[esi+p]
- rol ecx,16
- mov al,ch
- mov bl,cl
- rol ecx,16
- mov edi,[esi+eax*4+72+0x000]
- add edi,[esi+ebx*4+72+0x400]
- mov al,ch
- mov bl,cl
- xor edi,[esi+eax*4+72+0x800]
- add edi,[esi+ebx*4+72+0xC00]
- xor edx,edi
- xor edx,[esi+p+4]
- rol edx,16
- mov al,dh
- mov bl,dl
- rol edx,16
- mov edi,[esi+eax*4+72+0x000]
- add edi,[esi+ebx*4+72+0x400]
- mov al,dh
- mov bl,dl
- xor edi,[esi+eax*4+72+0x800]
- add edi,[esi+ebx*4+72+0xC00]
- xor ecx,edi
- .endm
-
-dtworounds: .macro p
- xor ecx,[esi+p+4]
- rol ecx,16
- mov al,ch
- mov bl,cl
- rol ecx,16
- mov edi,[esi+eax*4+72+0x000]
- add edi,[esi+ebx*4+72+0x400]
- mov al,ch
- mov bl,cl
- xor edi,[esi+eax*4+72+0x800]
- add edi,[esi+ebx*4+72+0xC00]
- xor edx,edi
- xor edx,[esi+p]
- rol edx,16
- mov al,dh
- mov bl,dl
- rol edx,16
- mov edi,[esi+eax*4+72+0x000]
- add edi,[esi+ebx*4+72+0x400]
- mov al,dh
- mov bl,dl
- xor edi,[esi+eax*4+72+0x800]
- add edi,[esi+ebx*4+72+0xC00]
- xor ecx,edi
- .endm
-
- .text
-
- .align 8
- .globl _blowfishEncrypt
-
-_blowfishEncrypt:
- push edi
- push esi
- push ebx
-
- mov esi,[esp+16]
- mov edi,[esp+24]
-
- xor eax,eax
- xor ebx,ebx
-
- mov ecx,[edi]
- mov edx,[edi+4]
-
- bswap ecx
- bswap edx
-
- etworounds 0
- etworounds 8
- etworounds 16
- etworounds 24
- etworounds 32
- etworounds 40
- etworounds 48
- etworounds 56
-
- mov edi,[esp+20]
- xor ecx,[esi+64]
- xor edx,[esi+68]
-
- bswap ecx
- bswap edx
-
- mov [edi+4],ecx
- mov [edi],edx
-
- xor eax,eax
-
- pop ebx
- pop esi
- pop edi
- ret
-
- .align 8
- .globl _blowfishDecrypt
-
-_blowfishDecrypt:
- push edi
- push esi
- push ebx
-
- mov esi,[esp+16]
- mov edi,[esp+24]
-
- xor eax,eax
- xor ebx,ebx
-
- mov ecx,[edi]
- mov edx,[edi+4]
-
- bswap ecx
- bswap edx
-
- dtworounds 64
- dtworounds 56
- dtworounds 48
- dtworounds 40
- dtworounds 32
- dtworounds 24
- dtworounds 16
- dtworounds 8
-
- mov edi,[esp+20]
- xor ecx,[esi+4]
- xor edx,[esi]
-
- bswap ecx
- bswap edx
-
- mov [edi+4],ecx
- mov [edi],edx
-
- xor eax,eax
-
- pop ebx
- pop esi
- pop edi
- ret
+++ /dev/null
-#
-# mp32opt.i386.asm
-#
-# Assembler optimized multiprecision integer routines for Intel 386
-#
-# Compile target is MetroWerks CodeWarrior Pro 5 for Windows
-#
-# Copyright (c) 1998, 1999, 2000, 2001 Virtual Unlimited B.V.
-#
-# Author: Bob Deblier <bob@virtualunlimited.com>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# 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,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
- .text
-
- .align 8
- .globl _mp32zero
-_mp32zero:
- push edi
-
- mov ecx,[esp+8]
- mov edi,[esp+12]
-
- xor eax,eax
- rep stosd
-
- pop edi
- ret
-
-
- .align 8
- .globl _mp32fill
-_mp32fill:
- push edi
-
- mov ecx,[esp+8]
- mov edi,[esp+12]
- mov eax,[esp+16]
-
- rep stosd
-
- pop edi
- ret
-
-
- .align 8
- .globl _mp32odd
-_mp32odd:
- mov ecx,[esp+4]
- mov eax,[esp+8]
- mov eax,[eax+ecx*4-4]
- and eax,1
- ret
-
-
- .align 8
- .globl _mp32even
-_mp32even:
- mov ecx,[esp+4]
- mov eax,[esp+8]
- mov eax,[eax+ecx*4-4]
- not eax
- and eax,1
- ret
-
-
- .align 8
- .globl _mp32addw
-_mp32addw:
- push edi
-
- mov ecx,[esp+8]
- mov edi,[esp+12]
- mov eax,[esp+16]
-
- lea edi,[edi+ecx*4-4]
- add [edi],eax
- dec ecx
- jz @mp32addw_end
- sub edi,4
- xor edx,edx
-
- .align 4
-@mp32addw_loop:
- adc [edi],edx
- sub edi,4
- dec ecx
- jnz @mp32addw_loop
-@mp32addw_end:
- sbb eax,eax
- neg eax
-
- pop edi
- ret
-
-
- .align 8
- .globl _mp32subw
-_mp32subw:
- push edi
-
- mov ecx,[esp+8]
- mov edi,[esp+12]
- mov eax,[esp+16]
-
- lea edi,[edi+ecx*4-4]
- sub [edi],eax
- dec ecx
- jz @mp32subw_end
- sub edi,4
- xor edx,edx
-
- .align 4
-@mp32subw_loop:
- sbb [edi],edx
- sub edi,4
- dec ecx
- jnz @mp32subw_loop
-@mp32subw_end:
- sbb eax,eax
- neg eax
-
- pop edi
- ret
-
-
- .align 8
- .globl _mp32add
-_mp32add:
- push edi
- push esi
-
- mov ecx,[esp+12]
- mov edi,[esp+16]
- mov esi,[esp+20]
-
- xor edx,edx
- dec ecx
-
-@mp32add_loop:
- mov eax,[esi+ecx*4]
- adc [edi+ecx*4],eax
- dec ecx
- jns @mp32add_loop
-
- sbb eax,eax
- neg eax
-
- pop esi
- pop edi
- ret
-
-
- .align 8
- .globl _mp32sub
-_mp32sub:
- push edi
- push esi
-
- mov ecx,[esp+12]
- mov edi,[esp+16]
- mov esi,[esp+20]
-
- xor edx,edx
- dec ecx
-
-@mp32sub_loop:
- mov eax,[esi+ecx*4]
- sbb [edi+ecx*4],eax
- dec ecx
- jns @mp32sub_loop
-
- sbb eax,eax
- neg eax
-
- pop esi
- pop edi
- ret
-
-
- .align 8
- .globl _mp32setmul
-_mp32setmul:
- push edi
- push esi
- push ebx
- push ebp
-
- mov ecx,[esp+20]
- mov edi,[esp+24]
- mov esi,[esp+28]
- mov ebp,[esp+32]
-
- xor edx,edx
- dec ecx
-
- .align 4
-@mp32setmul_loop:
- mov ebx,edx
- mov eax,[esi+ecx*4]
- mul ebp
- add eax,ebx
- adc edx,0
- mov [edi+ecx*4],eax
- dec ecx
- jns @mp32setmul_loop
-
- mov eax,edx
-
- pop ebp
- pop ebx
- pop esi
- pop edi
- ret
-
-
- .align 8
- .globl _mp32addmul
-_mp32addmul:
- push edi
- push esi
- push ebx
- push ebp
-
- mov ecx,[esp+20]
- mov edi,[esp+24]
- mov esi,[esp+28]
- mov ebp,[esp+32]
-
- xor edx,edx
- dec ecx
-
- .align 4
-@mp32addmul_loop:
- mov ebx,edx
- mov eax,[esi+ecx*4]
- mul ebp
- add eax,ebx
- adc edx,0
- add [edi+ecx*4],eax
- adc edx,0
- dec ecx
- jns @mp32addmul_loop
-
- mov eax,edx
-
- pop ebp
- pop ebx
- pop esi
- pop edi
- ret
-
-
- .align 8
- .globl _mp32addsqrtrc
-_mp32addsqrtrc:
- push edi
- push esi
- push ebx
-
- mov ecx,[esp+16]
- mov edi,[esp+20]
- mov esi,[esp+24]
-
- xor ebx,ebx
- dec ecx
-
- .align 4
-@mp32addsqrtrc_loop:
- mov eax,[esi+ecx*4]
- mul eax
- add eax,ebx
- adc edx,0
- add [edi+ecx*8+4],eax
- adc [edi+ecx*8+0],edx
- sbb ebx,ebx
- neg ebx
- dec ecx
- jns @mp32addsqrtrc_loop
-
- mov eax,ebx
-
- pop ebx
- pop esi
- pop edi
- ret
+++ /dev/null
-#
-# sha1opt.i586.asm
-#
-# Assembler optimized SHA-1 routines for Intel Pentium processors
-#
-# Compile target is Metrowerks CodeWarrior Pro 5 for Windows
-#
-# Copyright (c) 2000 Virtual Unlimited B.V.
-#
-# Author: Bob Deblier <bob@virtualunlimited.com>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# 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,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-K00 .equ 0x5a827999
-K20 .equ 0x6ed9eba1
-K40 .equ 0x8f1bbcdc
-K60 .equ 0xca62c1d6
-
-PARAM_H .equ 0
-PARAM_DATA .equ 20
-PARAM_OFFSET .equ 352
-
-subround1: .macro b,c,d,e,w
- mov ecx,c
- mov ebx,b
- mov edx,d
- rol eax,5
- xor ecx,edx
- add eax,e
- and ecx,ebx
- add eax,K00
- ror ebx,2
- add eax,w
- xor ecx,edx
- mov b,ebx
- add eax,ecx
- mov e,eax
- .endm
-
-subround2: .macro b,c,d,e,w
- mov ecx,c
- mov ebx,b
- rol eax,5
- xor ecx,ebx
- add eax,e
- xor ecx,d
- add eax,K20
- ror ebx,2
- add eax,w
- mov b,ebx
- add eax,ecx
- mov e,eax
- .endm
-
-subround3: .macro b,c,d,e,w
- mov ecx,c
- rol eax,5
- mov ebx,b
- mov edx,ecx
- add eax,e
- or ecx,ebx # (b|c)
- and edx,ebx # (b&c)
- and ecx,d # (b|c)&d
- add eax,K40
- or ecx,edx
- add eax,w
- ror ebx,2
- add eax,ecx
- mov b,ebx
- mov e,eax
- .endm
-
-subround4: .macro b,c,d,e,w
- mov ecx,c
- mov ebx,b
- rol eax,5
- xor ecx,ebx
- add eax,e
- xor ecx,d
- add eax,K60
- ror ebx,2
- add eax,w
- mov b,ebx
- add eax,ecx
- mov e,eax
- .endm
-
- .text
-
- .align 8
- .globl _sha1Process
-
-_sha1Process:
- push edi
- push esi
- push ebx
- push ebp
- # allocate local variables
- mov esi,[esp+20]
- sub esp,20
- lea edi,[esi+PARAM_DATA]
- mov ebp,esp
-
- mov ecx,4
-@loads:
- mov edx,[esi+ecx*4]
- mov [ebp+ecx*4],edx
- dec ecx
- jns @loads
-
- mov ecx,15
- xor eax,eax
-
- .align 4
-@swaps:
- mov edx,[edi+ecx*4]
- bswap edx
- mov [edi+ecx*4],edx
- dec ecx
- jns @swaps
-
- lea edi,[esi+PARAM_DATA]
- mov [esi+PARAM_OFFSET],al
- mov ecx,16
-
- .align 4
-@xors:
- mov eax,[edi+52]
- mov ebx,[edi+56]
- xor eax,[edi+32]
- xor ebx,[edi+36]
- xor eax,[edi+ 8]
- xor ebx,[edi+12]
- xor eax,[edi ]
- xor ebx,[edi+ 4]
- rol eax,1
- rol ebx,1
- mov [edi+64],eax
- mov [edi+68],ebx
- mov eax,[edi+60]
- mov ebx,[edi+64]
- xor eax,[edi+40]
- xor ebx,[edi+44]
- xor eax,[edi+16]
- xor ebx,[edi+20]
- xor eax,[edi+ 8]
- xor ebx,[edi+12]
- rol eax,1
- rol ebx,1
- mov [edi+72],eax
- mov [edi+76],ebx
- add edi,16
- dec ecx
- jnz @xors
-
- mov edi,PARAM_DATA
-
- # to optimize further, use esi only, and store the add constant into edi
- # will make code smaller and faster
-
-@round01to20:
- mov eax,[ebp]
- subround1 [ebp+4],[ebp+8],[ebp+12],[ebp+16],[esi+edi]
- subround1 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround1 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround1 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround1 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround1 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround1 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround1 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround1 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround1 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround1 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround1 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround1 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround1 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround1 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround1 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround1 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround1 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround1 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround1 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
-
-@round21to40:
- subround2 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround2 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround2 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround2 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround2 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround2 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround2 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround2 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround2 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround2 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround2 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround2 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround2 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround2 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround2 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround2 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround2 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround2 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround2 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround2 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
-
-@round41to60:
- subround3 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround3 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround3 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround3 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround3 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround3 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround3 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround3 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround3 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround3 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround3 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround3 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround3 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround3 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround3 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround3 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround3 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround3 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround3 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround3 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
-
-@round61to80:
- subround4 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround4 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround4 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround4 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround4 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround4 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround4 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround4 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround4 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround4 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround4 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround4 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround4 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround4 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround4 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- add edi,20
- subround4 [ebp+4],ebx,[ebp+12],[ebp+16],[esi+edi]
- subround4 [ebp],ebx,[ebp+8],[ebp+12],[esi+edi+4]
- subround4 [ebp+16],ebx,[ebp+4],[ebp+8],[esi+edi+8]
- subround4 [ebp+12],ebx,[ebp],[ebp+4],[esi+edi+12]
- subround4 [ebp+8],ebx,[ebp+16],[ebp],[esi+edi+16]
- # add edi,20
-
- mov ecx,4
-
-@adds:
- mov eax,[ebp+ecx*4]
- add [esi+ecx*4],eax
- dec ecx
- jns @adds
-
- add esp,20
- pop ebp
- pop ebx
- pop esi
- pop edi
- ret
--- /dev/null
+#define BEECRYPT_DLL_EXPORT
+
+#include "beecrypt/pkcs1.h"
+
+const byte EMSA_MD5_DIGESTINFO[18] = {
+ 0x30,0x20,0x30,0x0c,0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,
+ 0x04,0x10
+};
+
+const byte EMSA_SHA1_DIGESTINFO[15] = {
+ 0x30,0x21,0x30,0x09,0x06,0x05,0x2b,0x0e,0x03,0x02,0x1a,0x05,0x00,0x04,0x14
+};
+
+const byte EMSA_SHA256_DIGESTINFO[19] = {
+ 0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05,
+ 0x00,0x04,0x20
+};
+
+int pkcs1_emsa_encode_digest(hashFunctionContext* ctxt, byte* emdata, size_t emlen)
+{
+ int rc = -1;
+ const byte* tinfo;
+ size_t tlen, digestsize = ctxt->algo->digestsize;
+
+ if (strcmp(ctxt->algo->name, "MD5") == 0)
+ {
+ /* tlen is 18 bytes for EMSA_MD5_DIGESTINFO plus digestsize */
+ tinfo = EMSA_MD5_DIGESTINFO;
+ tlen = 18;
+ }
+ else if (strcmp(ctxt->algo->name, "SHA-1") == 0)
+ {
+ /* tlen is 15 bytes for EMSA_SHA1_DIGESTINFO plus 20 bytes digest */
+ tinfo = EMSA_SHA1_DIGESTINFO;
+ tlen = 15;
+ }
+ else if (strcmp(ctxt->algo->name, "SHA-256") == 0)
+ {
+ /* tlen is 19 bytes for EMSA_SHA256_DIGESTINFO plus 32 bytes digest */
+ tinfo = EMSA_SHA256_DIGESTINFO;
+ tlen = 19;
+ }
+ else
+ goto cleanup;
+
+ tlen += digestsize;
+
+ /* fill emdata with 0x00 0x01 0xff .... 0xff 0x00 EMSA_x_DIGESTINFO DIGEST */
+ emdata[0] = 0x00;
+ emdata[1] = 0x01;
+ memset(emdata+2, 0xff, emlen-tlen-3);
+ emdata[emlen-tlen-1] = 0x00;
+ memcpy(emdata+emlen-tlen, tinfo, tlen-digestsize);
+
+ hashFunctionContextDigest(ctxt, emdata+emlen-digestsize);
+
+ rc = 0;
+
+cleanup:
+
+ return rc;
+}
--- /dev/null
+/*!\file pkcs1.h
+ * \brief PKCS#1 utility routines
+ * \ingroup PKCS1_m
+ */
+
+#ifndef _PKCS1_H
+#define _PKCS1_H
+
+#include "beecrypt/beecrypt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!\brief This function computes the digest, and encodes it it according to PKCS#1 for signing
+ * \param ctxt The hash function context
+ * \param emdata
+ * \param emsize
+ */
+BEECRYPTAPI
+int pkcs1_emsa_encode_digest(hashFunctionContext* ctxt, byte* emdata, size_t emsize);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+#define BEECRYPT_DLL_EXPORT
+
+#include "beecrypt/pkcs12.h"
+
+int pkcs12_derive_key(const hashFunction* h, byte id, const byte* pdata, size_t psize, const byte* sdata, size_t ssize, size_t iterationcount, byte* ndata, size_t nsize)
+{
+ int rc = -1;
+ size_t i, remain;
+ hashFunctionContext ctxt;
+ byte *digest;
+
+ digest = (byte*) malloc(h->digestsize);
+ if (!digest)
+ goto cleanup;
+
+ if (hashFunctionContextInit(&ctxt, h))
+ goto cleanup;
+
+ /* we start by hashing the diversifier; don't allocate a buffer for this */
+ for (i = 0; i < h->blocksize; i++)
+ hashFunctionContextUpdate(&ctxt, &id, 1);
+
+ /* next we hash the salt data, concatenating until we have a whole number of blocks */
+ if (ssize)
+ {
+ remain = ((ssize / h->blocksize) + (ssize % h->blocksize)) * h->blocksize;
+ while (remain > 0)
+ {
+ size_t tmp = remain > ssize ? ssize : remain;
+
+ hashFunctionContextUpdate(&ctxt, sdata, tmp);
+
+ remain -= tmp;
+ }
+ }
+
+ /* next we hash the password data, concatenating until we have a whole number of blocks */
+ if (psize)
+ {
+ remain = ((psize / h->blocksize) + (psize % h->blocksize)) * h->blocksize;
+ while (remain > 0)
+ {
+ size_t tmp = remain > psize ? psize : remain;
+
+ hashFunctionContextUpdate(&ctxt, pdata, tmp);
+
+ remain -= tmp;
+ }
+ }
+
+ /* now we iterate through the following loop */
+ while (iterationcount-- > 0)
+ {
+ hashFunctionContextDigest(&ctxt, digest);
+ hashFunctionContextUpdate(&ctxt, digest, h->digestsize);
+ }
+
+ /* do the final digest */
+ hashFunctionContextDigest(&ctxt, digest);
+
+ /* fill key */
+ while (nsize > 0)
+ {
+ size_t tmp = nsize > h->digestsize ? h->digestsize : nsize;
+
+ memcpy(ndata, digest, tmp);
+ ndata += tmp;
+ nsize -= tmp;
+ }
+
+ if (hashFunctionContextFree(&ctxt))
+ goto cleanup;
+
+ rc = 0;
+
+cleanup:
+ if (digest)
+ free(digest);
+
+ return rc;
+}
--- /dev/null
+/*!\file pkcs12.h
+ * \brief PKCS#12 utility routines
+ * \ingroup PKCS12_m
+ */
+
+#ifndef _PKCS12_H
+#define _PKCS12_H
+
+#include "beecrypt/beecrypt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PKCS12_ID_CIPHER 0x1
+#define PKCS12_ID_IV 0x2
+#define PKCS12_ID_MAC 0x3
+
+BEECRYPTAPI
+int pkcs12_derive_key(const hashFunction* h, byte id, const byte* pdata, size_t psize, const byte* sdata, size_t ssize, size_t iterationcount, byte* ndata, size_t nsize);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+++ /dev/null
-.deps
-.libs
-Makefile
-Makefile.in
-*.la
-*.lo
-*.pyc
# Makefile for rpm library.
-AUTOMAKE_OPTIONS = 1.4 foreign
+AUTOMAKE_OPTIONS = 1.4 foreign no-dependencies
LINT = splint
-PYVER= 2.2
-
SUBDIRS = test
-pylibdir = $(shell python -c 'import sys; print sys.path[1]')
-pyincdir = $(prefix)/include/python${PYVER}
-
EXTRA_DIST = debug-py.c
INCLUDES = -I. \
- -I$(top_srcdir) \
- -I$(pyincdir)
+ -I$(top_srcdir)/.. @PYTHONINC@
noinst_HEADERS = mpw-py.h rng-py.h
-mylibs= $(top_builddir)/.libs/libbeecrypt.so
+mylibs = $(top_builddir)/libbeecrypt.la
LDADD =
-pythondir = $(pylibdir)/site-packages
-python_PROGRAMS = _bc.so
-
-_bc_so_SOURCES =
-_bc_so_LDFLAGS = $(mylibs) $(LIBS) -shared -Wl,-soname,_bc.so
-
-noinst_LTLIBRARIES = libbc.la
-libbc_la_SOURCES = _bc-py.c mpw-py.c rng-py.c
+pythondir = @PYTHONLIB@
+python_LTLIBRARIES = _bc.la
-_bc.so$(EXEEXT): $(libbc_la_OBJECTS)
- $(CC) -o $@ $(libbc_la_OBJECTS) $(_bc_so_LDFLAGS)
+_bc_la_SOURCES = _bc-py.c mpw-py.c rng-py.c
+_bc_la_LDFLAGS = -avoid-version -module
+_bc_la_LIBADD = $(mylibs)
splint_srcs = _bc-py.c $(libbc_la_sources)
*/
#define _REENTRANT 1 /* XXX config.h collides with pyconfig.h */
-#include "system.h"
+#include "config.h"
#include "Python.h"
#ifdef __LCLINT__
#define PyObject_HEAD int _PyObjectHead;
#endif
-#include "mpw-py.h"
-#include "rng-py.h"
-
-#include "debug.h"
+#include "beecrypt/python/mpw-py.h"
+#include "beecrypt/python/rng-py.h"
#ifdef __LCLINT__
#undef PyObject_HEAD
/*@unchecked@*/
extern PyTypeObject PyFrame_Type;
-#include "mpw-py.h" /* XXX debug only */
-#include "rng-py.h" /* XXX debug only */
+#include "beecrypt/python/mpw-py.h" /* XXX debug only */
+#include "beecrypt/python/rng-py.h" /* XXX debug only */
/**
*/
*/
#define _REENTRANT 1 /* XXX config.h collides with pyconfig.h */
-#define _GNU_SOURCE 1 /* XXX pick up stpcpy et al */
+#define _GNU_SOURCE /* XXX pick up stpcpy et al */
#include "config.h"
#include "Python.h"
#define PyObject_HEAD int _PyObjectHead;
#endif
-#include "mpw-py.h"
-#include "rng-py.h"
+#include "beecrypt/python/mpw-py.h"
+#include "beecrypt/python/rng-py.h"
#include "debug-py.c"
/*@global stderr, fileSystem @*/
/*@modifies stderr, fileSystem @*/
{
-fprintf(stderr, "%5.5s %p[%Zu]:\t", msg, MPW_DATA(x), MPW_SIZE(x)), mpfprintln(stderr, MPW_SIZE(x), MPW_DATA(x));
+fprintf(stderr, "%5.5s %p[%d]:\t", msg, MPW_DATA(x), MPW_SIZE(x)), mpfprintln(stderr, MPW_SIZE(x), MPW_DATA(x));
}
static size_t
res = (nbits * mp_bases[base].chars_per_bit_exactly) + 1;
}
if (_mpw_debug < -1)
-fprintf(stderr, "*** mpsizeinbase(%p[%Zu], %Zu) res %u\n", xdata, xsize, base, (unsigned)res);
+fprintf(stderr, "*** mpsizeinbase(%p[%d], %d) res %u\n", xdata, xsize, base, (unsigned)res);
return res;
}
size_t result;
if (_mpw_debug < -1)
-fprintf(stderr, "*** mpstr(%p[%Zu], %p[%Zu], %u):\t", t, nt, data, size, (unsigned) base), mpfprintln(stderr, size, data);
+fprintf(stderr, "*** mpstr(%p[%d], %p[%d], %d):\t", t, nt, data, size, base), mpfprintln(stderr, size, data);
mpsetx(asize, adata, size, data);
mpndivmod(zdata, asize, adata, 1, &base, wksp);
if (_mpw_debug < -1) {
-fprintf(stderr, " a %p[%Zu]:\t", adata, asize), mpfprintln(stderr, asize, adata);
-fprintf(stderr, " z %p[%Zu]:\t", zdata, asize+1), mpfprintln(stderr, asize+1, zdata);
+fprintf(stderr, " a %p[%d]:\t", adata, asize), mpfprintln(stderr, asize, adata);
+fprintf(stderr, " z %p[%d]:\t", zdata, asize+1), mpfprintln(stderr, asize+1, zdata);
}
result = zdata[asize];
t[nt] = bchars[result];
}
if (_mpw_debug < -1)
-fprintf(stderr, "*** mpw_format(%p,%Zu,%d):\t", z, base, addL), mpfprintln(stderr, zsize, zdata);
+fprintf(stderr, "*** mpw_format(%p,%d,%d):\t", z, base, addL), mpfprintln(stderr, zsize, zdata);
assert(base >= 2 && base <= 36);
size = MP_ROUND_B2W(15 * xbits);
if (_mpw_debug < 0)
-fprintf(stderr, "*** pbits %Zu xbits %Zu nsize %Zu size %Zu\n", pbits, xbits, nsize, size);
+fprintf(stderr, "*** pbits %d xbits %d nsize %d size %d\n", pbits, xbits, nsize, size);
mpnsize(n, nsize);
/* 1. Precompute odd powers of x (up to 2**K). */
}
if (_mpw_debug)
-fprintf(stderr, "*** mpw_%s %p[%Zu]\t", fname, MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
+fprintf(stderr, "*** mpw_%s %p[%d]\t", fname, MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
exit:
mpbfree(&b);
z = mpw_FromMPW(zsize, zdata, 1);
if (_mpw_debug < 0)
-fprintf(stderr, "*** mpw_%s %p[%Zu]\t", fname, MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
+fprintf(stderr, "*** mpw_%s %p[%d]\t", fname, MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
exit:
mpbfree(&b);
mpndivmod(zdata, asize, adata, bsize, bdata, wksp);
if (_mpw_debug < 0) {
-fprintf(stderr, " a %p[%Zu]:\t", adata, asize), mpfprintln(stderr, asize, adata);
-fprintf(stderr, " b %p[%Zu]:\t", bdata, bsize), mpfprintln(stderr, bsize, bdata);
-fprintf(stderr, " z %p[%Zu]:\t", zdata, zsize), mpfprintln(stderr, zsize, zdata);
+fprintf(stderr, " a %p[%d]:\t", adata, asize), mpfprintln(stderr, asize, adata);
+fprintf(stderr, " b %p[%d]:\t", bdata, bsize), mpfprintln(stderr, bsize, bdata);
+fprintf(stderr, " z %p[%d]:\t", zdata, zsize), mpfprintln(stderr, zsize, zdata);
}
zsize -= bsize;
}
if (z != NULL && _mpw_debug)
-fprintf(stderr, "*** mpw_neg %p[%Zu]\t", MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
+fprintf(stderr, "*** mpw_neg %p[%d]\t", MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
return (PyObject *)z;
}
z = mpw_Copy(a);
if (z != NULL && _mpw_debug)
-fprintf(stderr, "*** mpw_pos %p[%Zu]\t", MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
+fprintf(stderr, "*** mpw_pos %p[%d]\t", MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
return (PyObject *)z;
}
z = (mpwObject *)mpw_pos(a);
if (z != NULL && _mpw_debug)
-fprintf(stderr, "*** mpw_abs %p[%Zu]\t", MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
+fprintf(stderr, "*** mpw_abs %p[%d]\t", MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));
return (PyObject *)z;
}
/** \ingroup py_c
* \file python/mpw-py.h
*/
-#include "mp.h"
+#include "beecrypt/mp.h"
/**
*/
#define PyObject_HEAD int _PyObjectHead;
#endif
-#include "rng-py.h"
+#include "beecrypt/python/rng-py.h"
#include "debug-py.c"
/** \ingroup py_c
* \file python/rng-py.h
*/
-#include "beecrypt.h"
-#include "mpprime.h"
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/mpprime.h"
/**
*/
+++ /dev/null
-Makefile
-Makefile.in
-*.pyc
AUTOMAKE_OPTIONS = 1.4 foreign
-PYVER= 2.2
-
-pylibdir = $(shell python -c 'import sys; print sys.path[1]')
VALGRIND = # valgrind --verbose --leak-check=yes
EXTRA_DIST = \
all:
check:
- env PYTHONPATH=.. $(VALGRIND) python test_all.py verbose
+ $(VALGRIND) PYTHONPATH=.. python test_all.py verbose
zs = hex(za)
print "__hex__:\t", hex(wa), "\t", zs
-# XXX x86_64 appends L to zs
-# assert hex(wa) == zs
+# assert hex(wa) == zs # fails because of missing trailing L
zs = oct(za)
print "__oct__:\t", oct(wa), "\t", zs
-# XXX x86_64 appends L to zs
-# assert oct(wa) == zs
+# assert oct(wa) == zs # fails because of missing trailing L
print "__neg__:\t", (-wa), "\t", long(-za)
print "__pos__:\t", (+wa), "\t", long(+za)
* \ingroup IF_m IF_rsa_m
*/
-#include "system.h"
-#include "rsa.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
-int rsapub(const rsapk* pk, const mpnumber* m, mpnumber* c)
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/rsa.h"
+
+int rsapub(const mpbarrett* n, const mpnumber* e,
+ const mpnumber* m, mpnumber* c)
{
- register size_t size = pk->n.size;
+ register size_t size = n->size;
register mpw* temp;
- if (mpgex(m->size, m->data, pk->n.size, pk->n.modl))
+ if (mpgex(m->size, m->data, n->size, n->modl))
return -1;
- temp = (mpw*) malloc((4*size+2)*sizeof(*temp));
+ temp = (mpw*) malloc((4*size+2)*sizeof(mpw));
if (temp)
{
mpnsize(c, size);
- mpbpowmod_w(&pk->n, m->size, m->data, pk->e.size, pk->e.data, c->data, temp);
+ mpbpowmod_w(n, m->size, m->data, e->size, e->data, c->data, temp);
+
free(temp);
return 0;
return -1;
}
-int rsapri(const rsakp* kp, const mpnumber* c, mpnumber* m)
+int rsapri(const mpbarrett* n, const mpnumber* d,
+ const mpnumber* c, mpnumber* m)
{
- register size_t size = kp->n.size;
+ register size_t size = n->size;
register mpw* temp;
- if (mpgex(c->size, c->data, kp->n.size, kp->n.modl))
+ if (mpgex(c->size, c->data, n->size, n->modl))
return -1;
- temp = (mpw*) malloc((4*size+2) * sizeof(*temp));
+ temp = (mpw*) malloc((4*size+2)*sizeof(mpw));
if (temp)
{
mpnsize(m, size);
- mpbpowmod_w(&kp->n, c->size, c->data, kp->d.size, kp->d.data, m->data, temp);
+ mpbpowmod_w(n, c->size, c->data, d->size, d->data, m->data, temp);
free(temp);
return -1;
}
-int rsapricrt(const rsakp* kp, const mpnumber* c, mpnumber* m)
+int rsapricrt(const mpbarrett* n, const mpbarrett* p, const mpbarrett* q,
+ const mpnumber* dp, const mpnumber* dq, const mpnumber* qi,
+ const mpnumber* c, mpnumber* m)
{
- register size_t nsize = kp->n.size;
- register size_t psize = kp->p.size;
- register size_t qsize = kp->q.size;
+ register size_t nsize = n->size;
+ register size_t psize = p->size;
+ register size_t qsize = q->size;
register mpw* ptemp;
register mpw* qtemp;
- if (mpgex(c->size, c->data, kp->n.size, kp->n.modl))
+ if (mpgex(c->size, c->data, n->size, n->modl))
return -1;
- ptemp = (mpw*) malloc((6*psize+2)*sizeof(*ptemp));
+ ptemp = (mpw*) malloc((6*psize+2)*sizeof(mpw));
if (ptemp == (mpw*) 0)
return -1;
- qtemp = (mpw*) malloc((6*qsize+2)*sizeof(*qtemp));
+ qtemp = (mpw*) malloc((6*qsize+2)*sizeof(mpw));
if (qtemp == (mpw*) 0)
{
free(ptemp);
mpsetx(psize*2, ptemp, c->size, c->data);
/* reduce modulo p before we powmod */
- mpbmod_w(&kp->p, ptemp, ptemp+psize, ptemp+2*psize);
+ mpbmod_w(p, ptemp, ptemp+psize, ptemp+2*psize);
- /* compute j1 = c^d1 mod p, store @ ptemp */
- mpbpowmod_w(&kp->p, psize, ptemp+psize, kp->d1.size, kp->d1.data, ptemp, ptemp+2*psize);
+ /* compute j1 = c^dp mod p, store @ ptemp */
+ mpbpowmod_w(p, psize, ptemp+psize, dp->size, dp->data, ptemp, ptemp+2*psize);
/* resize c for powmod q */
mpsetx(qsize*2, qtemp, c->size, c->data);
/* reduce modulo q before we powmod */
- mpbmod_w(&kp->q, qtemp, qtemp+qsize, qtemp+2*qsize);
+ mpbmod_w(q, qtemp, qtemp+qsize, qtemp+2*qsize);
- /* compute j2 = c^d2 mod q, store @ qtemp */
- mpbpowmod_w(&kp->q, qsize, qtemp+qsize, kp->d2.size, kp->d2.data, qtemp, qtemp+2*qsize);
+ /* compute j2 = c^dq mod q, store @ qtemp */
+ mpbpowmod_w(q, qsize, qtemp+qsize, dq->size, dq->data, qtemp, qtemp+2*qsize);
/* compute j1-j2 mod p, store @ ptemp */
- mpbsubmod_w(&kp->p, psize, ptemp, qsize, qtemp, ptemp, ptemp+2*psize);
+ mpbsubmod_w(p, psize, ptemp, qsize, qtemp, ptemp, ptemp+2*psize);
/* compute h = c*(j1-j2) mod p, store @ ptemp */
- mpbmulmod_w(&kp->p, psize, ptemp, psize, kp->c.data, ptemp, ptemp+2*psize);
+ mpbmulmod_w(p, psize, ptemp, psize, qi->data, ptemp, ptemp+2*psize);
/* make sure the message gets the proper size */
mpnsize(m, nsize);
/* compute m = h*q + j2 */
- mpmul(m->data, psize, ptemp, qsize, kp->q.modl);
- (void) mpaddx(nsize, m->data, qsize, qtemp);
+ mpmul(m->data, psize, ptemp, qsize, q->modl);
+ mpaddx(nsize, m->data, qsize, qtemp);
free(ptemp);
free(qtemp);
return 0;
}
-int rsavrfy(const rsapk* pk, const mpnumber* m, const mpnumber* c)
+int rsavrfy(const mpbarrett* n, const mpnumber* e,
+ const mpnumber* m, const mpnumber* c)
{
int rc;
- register size_t size = pk->n.size;
+ register size_t size = n->size;
+
register mpw* temp;
- if (mpgex(m->size, m->data, pk->n.size, pk->n.modl))
+ if (mpgex(m->size, m->data, n->size, n->modl))
return -1;
- if (mpgex(c->size, c->data, pk->n.size, pk->n.modl))
+ if (mpgex(c->size, c->data, n->size, n->modl))
return 0;
- temp = (mpw*) malloc((5*size+2) * sizeof(*temp));
+ temp = (mpw*) malloc((5*size+2)*sizeof(mpw));
if (temp)
{
- mpbpowmod_w(&pk->n, c->size, c->data, pk->e.size, pk->e.data, temp, temp+size);
+ mpbpowmod_w(n, m->size, m->data, e->size, e->data, temp, temp+size);
- rc = mpeqx(size, temp, m->size, m->data);
+ rc = mpeqx(size, temp, c->size, c->data);
free(temp);
return rc;
}
+
return 0;
}
#ifndef _RSA_H
#define _RSA_H
-#include "rsakp.h"
+#include "beecrypt/rsakp.h"
#ifdef __cplusplus
extern "C" {
#endif
-/**
- * The raw RSA public key operation.
+/*!\fn int rsapub(const mpbarrett* n, const mpnumber* e, const mpnumber* m, mpnumber* c)
+ * \brief This function performs a raw RSA public key operation.
*
* This function can be used for encryption and verifying.
*
* It performs the following operation:
* \li \f$c=m^{e}\ \textrm{mod}\ n\f$
*
- * @param pk RSA public key
- * @param m message
- * @param c ciphertext
- * @retval 0 on success, -1 on failure
- */
-BEECRYPTAPI /*@unused@*/
- int rsapub(const rsapk* pk, const mpnumber* m, mpnumber* c)
- /*@modifies c @*/;
+ * \param n The RSA modulus.
+ * \param e The RSA public exponent.
+ * \param m The message.
+ * \param c The ciphertext.
+ * \retval 0 on success.
+ * \retval -1 on failure.
+ */
+BEECRYPTAPI
+int rsapub(const mpbarrett* n, const mpnumber* e,
+ const mpnumber* m, mpnumber* c);
-/**
- * The raw RSA private key operation.
+/*!\fn int rsapri(const mpbarrett* n, const mpnumber* d, const mpnumber* c, mpnumber* m)
+ * \brief This function performs a raw RSA private key operation.
*
* This function can be used for decryption and signing.
*
* It performs the operation:
* \li \f$m=c^{d}\ \textrm{mod}\ n\f$
*
- * @param kp RSA keypair
- * @param c ciphertext
- * @param m message
- * @retval 0 on success, -1 on failure
+ * \param n The RSA modulus.
+ * \param d The RSA private exponent.
+ * \param c The ciphertext.
+ * \param m The message.
+ * \retval 0 on success.
+ * \retval -1 on failure.
*/
-BEECRYPTAPI /*@unused@*/
-int rsapri (const rsakp* kp, const mpnumber* c, mpnumber* m)
- /*@modifies m @*/;
+BEECRYPTAPI
+int rsapri(const mpbarrett* n, const mpnumber* d,
+ const mpnumber* c, mpnumber* m);
-/**
- * The raw RSA private key operation, with Chinese Remainder Theorem.
+/*!\fn int rsapricrt(const mpbarrett* n, const mpbarrett* p, const mpbarrett* q, const mpnumber* dp, const mpnumber* dq, const mpnumber* qi, const mpnumber* c, mpnumber* m)
+ *
+ * \brief This function performs a raw RSA private key operation, with
+ * application of the Chinese Remainder Theorem.
*
* It performs the operation:
- * \li \f$j_1=c^{d_1}\ \textrm{mod}\ p\f$
- * \li \f$j_2=c^{d_2}\ \textrm{mod}\ q\f$
- * \li \f$h=c \cdot (j_1-j_2)\ \textrm{mod}\ p\f$
+ * \li \f$j_1=c^{dp}\ \textrm{mod}\ p\f$
+ * \li \f$j_2=c^{dq}\ \textrm{mod}\ q\f$
+ * \li \f$h=qi \cdot (j_1-j_2)\ \textrm{mod}\ p\f$
* \li \f$m=j_2+hq\f$
*
- * @param kp RSA keypair
- * @param c ciphertext
- * @param m message
- * @retval 0 on success, -1 on failure.
+ * \param n The RSA modulus.
+ * \param p The first RSA prime factor.
+ * \param q The second RSA prime factor.
+ * \param dp
+ * \param dq
+ * \param qi
+ * \param c The ciphertext.
+ * \param m The message.
+ * \retval 0 on success.
+ * \retval -1 on failure.
*/
BEECRYPTAPI
-int rsapricrt(const rsakp* kp, const mpnumber* c, mpnumber* m)
- /*@modifies m @*/;
+int rsapricrt(const mpbarrett* n, const mpbarrett* p, const mpbarrett* q,
+ const mpnumber* dp, const mpnumber* dq, const mpnumber* qi,
+ const mpnumber* c, mpnumber* m);
-/**
- * Verify if ciphertext \e c was encrypted from cleartext \e m
- * with the private key matching the given public key \e pk.
+/*!\fn int rsavrfy(const mpbarrett* n, const mpnumber* e, const mpnumber* m, const mpnumber* c)
+ * \brief This function performs a raw RSA verification.
+ *
+ * It verifies if ciphertext \a c was encrypted from cleartext \a m
+ * with the private key matching the given public key \a (n, e).
*
- * @param pk RSA public key
- * @param m cleartext message
- * @param c ciphertext message
- * @retval 1 on success, 0 on failure
+ * \param n The RSA modulus.
+ * \param e The RSA public exponent.
+ * \param m The cleartext message.
+ * \param c The ciphertext message.
+ * \retval 1 on success.
+ * \retval 0 on failure.
*/
BEECRYPTAPI
-int rsavrfy (const rsapk* pk, const mpnumber* m, const mpnumber* c)
- /*@*/;
+int rsavrfy(const mpbarrett* n, const mpnumber* e,
+ const mpnumber* m, const mpnumber* c);
#ifdef __cplusplus
}
* \ingroup IF_m IF_rsa_m
*/
-#include "system.h"
-#include "rsakp.h"
-#include "mpprime.h"
-#include "mp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/rsakp.h"
+#include "beecrypt/mpprime.h"
/*!\addtogroup IF_rsa_m
* \{
*/
-int rsakpMake(rsakp* kp, randomGeneratorContext* rgc, size_t nsize)
+int rsakpMake(rsakp* kp, randomGeneratorContext* rgc, size_t bits)
{
/*
* Generates an RSA Keypair for use with the Chinese Remainder Theorem
*/
- register size_t pqsize = (nsize + 1U) >> 1;
- register mpw* temp = (mpw*) malloc((16*pqsize+6) * sizeof(*temp));
- register int newn = 1;
+ size_t pbits = (bits+1) >> 1;
+ size_t qbits = (bits - pbits);
+ size_t nsize = MP_BITS_TO_WORDS(bits+MP_WBITS-1);
+ size_t psize = MP_BITS_TO_WORDS(pbits+MP_WBITS-1);
+ size_t qsize = MP_BITS_TO_WORDS(qbits+MP_WBITS-1);
+ size_t pqsize = psize+qsize;
+ mpw* temp = (mpw*) malloc((16*pqsize+6)*sizeof(mpw));
if (temp)
{
- mpbarrett r, psubone, qsubone;
- mpnumber phi;
-
- nsize = pqsize << 1;
-
- /* set e */
- mpnsetw(&kp->e, 65535);
-
- /* generate a random prime p and q */
- mpprnd_w(&kp->p, rgc, pqsize, mpptrials(MP_WORDS_TO_BITS(pqsize)), &kp->e, temp);
- mpprnd_w(&kp->q, rgc, pqsize, mpptrials(MP_WORDS_TO_BITS(pqsize)), &kp->e, temp);
-
- /* if p <= q, perform a swap to make p larger than q */
- if (mple(pqsize, kp->p.modl, kp->q.modl))
+ mpbarrett psubone, qsubone;
+ mpnumber phi, min;
+ mpw* divmod = temp;
+ mpw* dividend = divmod+nsize+1;
+ mpw* workspace = dividend+nsize+1;
+ int shift;
+
+ /* set e to default value if e is empty */
+ if (kp->e.size == 0 && !kp->e.data)
+ mpnsetw(&kp->e, 65537U);
+
+ /* generate a random prime p, so that gcd(p-1,e) = 1 */
+ mpprnd_w(&kp->p, rgc, pbits, mpptrials(pbits), &kp->e, temp);
+
+ /* find out how big q should be */
+ shift = MP_WORDS_TO_BITS(nsize) - bits;
+ mpzero(nsize, dividend);
+ dividend[0] |= MP_MSBMASK;
+ dividend[nsize-1] |= MP_LSBMASK;
+ mpndivmod(divmod, nsize+1, dividend, psize, kp->p.modl, workspace);
+ mprshift(nsize+1, divmod, shift);
+
+ mpnzero(&min);
+ mpnset(&min, nsize+1-psize, divmod);
+
+ /* generate a random prime q, with min/max constraints, so that gcd(q-1,e) = 1 */
+ if (mpprndr_w(&kp->q, rgc, qbits, mpptrials(qbits), &min, (mpnumber*) 0, &kp->e, temp))
{
- memcpy(&r, &kp->q, sizeof(r));
- memcpy(&kp->q, &kp->p, sizeof(kp->q));
- memcpy(&kp->p, &r, sizeof(kp->p));
+ /* shouldn't happen */
+ mpnfree(&min);
+ free(temp);
+ return -1;
}
- mpbzero(&r);
+ mpnfree(&min);
+
mpbzero(&psubone);
mpbzero(&qsubone);
mpnzero(&phi);
- while (1)
- {
- mpmul(temp, pqsize, kp->p.modl, pqsize, kp->q.modl);
-
- if (newn && mpmsbset(nsize, temp))
- break;
-
- /* product of p and q doesn't have the required size (one bit short) */
-
- mpprnd_w(&r, rgc, pqsize, mpptrials(MP_WORDS_TO_BITS(pqsize)), &kp->e, temp);
-
- /*@-usedef -branchstate @*/ /* r is set */
- if (mple(pqsize, kp->p.modl, r.modl))
- {
- mpbfree(&kp->q);
- memcpy(&kp->q, &kp->p, sizeof(kp->q));
- memcpy(&kp->p, &r, sizeof(kp->p));
- mpbzero(&r);
- newn = 1;
- }
- else if (mple(pqsize, kp->q.modl, r.modl))
- {
- mpbfree(&kp->q);
- memcpy(&kp->q, &r, sizeof(kp->q));
- mpbzero(&r);
- newn = 1;
- }
- else
- {
- mpbfree(&r);
- newn = 0;
- }
- /*@=usedef =branchstate @*/
- }
-
- mpbset(&kp->n, nsize, temp);
+ /* set n = p*q, with appropriate size (pqsize may be > nsize) */
+ mpmul(temp, psize, kp->p.modl, qsize, kp->q.modl);
+ mpbset(&kp->n, nsize, temp+pqsize-nsize);
/* compute p-1 */
mpbsubone(&kp->p, temp);
- mpbset(&psubone, pqsize, temp);
+ mpbset(&psubone, psize, temp);
/* compute q-1 */
mpbsubone(&kp->q, temp);
- mpbset(&qsubone, pqsize, temp);
+ mpbset(&qsubone, qsize, temp);
- /*@-usedef@*/ /* psubone/qsubone are set */
/* compute phi = (p-1)*(q-1) */
- mpmul(temp, pqsize, psubone.modl, pqsize, qsubone.modl);
+ mpmul(temp, psize, psubone.modl, qsize, qsubone.modl);
mpnset(&phi, nsize, temp);
- /* compute d = inv(e) mod phi */
- (void) mpninv(&kp->d, &kp->e, &phi);
+ /* compute d = inv(e) mod phi; if gcd(e, phi) != 1 then this function will fail
+ */
+ if (mpninv(&kp->d, &kp->e, &phi) == 0)
+ {
+ /* shouldn't happen, since gcd(p-1,e) = 1 and gcd(q-1,e) = 1 ==> gcd((p-1)(q-1),e) = 1 */
+ free(temp);
+ return -1;
+ }
- /* compute d1 = d mod (p-1) */
- mpnsize(&kp->d1, pqsize);
- mpbmod_w(&psubone, kp->d.data, kp->d1.data, temp);
+ /* compute dp = d mod (p-1) */
+ mpnsize(&kp->dp, psize);
+ mpbmod_w(&psubone, kp->d.data, kp->dp.data, temp);
- /* compute d2 = d mod (q-1) */
- mpnsize(&kp->d2, pqsize);
- mpbmod_w(&qsubone, kp->d.data, kp->d2.data, temp);
+ /* compute dq = d mod (q-1) */
+ mpnsize(&kp->dq, qsize);
+ mpbmod_w(&qsubone, kp->d.data, kp->dq.data, temp);
- /* compute c = inv(q) mod p */
- (void) mpninv(&kp->c, (const mpnumber*) &kp->q, (const mpnumber*) &kp->p);
+ /* compute qi = inv(q) mod p */
+ mpninv(&kp->qi, (mpnumber*) &kp->q, (mpnumber*) &kp->p);
free(temp);
- /*@=usedef@*/
return 0;
}
int rsakpInit(rsakp* kp)
{
- memset(kp, 0, sizeof(*kp));
+ memset(kp, 0, sizeof(rsakp));
/* or
mpbzero(&kp->n);
mpnzero(&kp->e);
mpnzero(&kp->d);
mpbzero(&kp->p);
mpbzero(&kp->q);
- mpnzero(&kp->d1);
- mpnzero(&kp->d2);
- mpnzero(&kp->c);
+ mpnzero(&kp->dp);
+ mpnzero(&kp->dq);
+ mpnzero(&kp->qi);
*/
return 0;
int rsakpFree(rsakp* kp)
{
- /*@-usereleased -compdef @*/ /* kp->param.{n,p,q}.modl is OK */
+ /* wipe all secret key components */
mpbfree(&kp->n);
mpnfree(&kp->e);
+ mpnwipe(&kp->d);
mpnfree(&kp->d);
+ mpbwipe(&kp->p);
mpbfree(&kp->p);
+ mpbwipe(&kp->q);
mpbfree(&kp->q);
- mpnfree(&kp->d1);
- mpnfree(&kp->d2);
- mpnfree(&kp->c);
+ mpnwipe(&kp->dp);
+ mpnfree(&kp->dp);
+ mpnwipe(&kp->dq);
+ mpnfree(&kp->dq);
+ mpnwipe(&kp->qi);
+ mpnfree(&kp->qi);
return 0;
- /*@=usereleased =compdef @*/
}
int rsakpCopy(rsakp* dst, const rsakp* src)
mpncopy(&dst->d, &src->d);
mpbcopy(&dst->p, &src->p);
mpbcopy(&dst->q, &src->q);
- mpncopy(&dst->d1, &src->d1);
- mpncopy(&dst->d2, &src->d2);
- mpncopy(&dst->c, &src->c);
+ mpncopy(&dst->dp, &src->dp);
+ mpncopy(&dst->dp, &src->dp);
+ mpncopy(&dst->qi, &src->qi);
return 0;
}
#ifndef _RSAKP_H
#define _RSAKP_H
-#include "rsapk.h"
+#include "beecrypt/rsapk.h"
/*!\brief RSA keypair.
* \ingroup IF_rsa_m
*/
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI rsakp
+#else
+struct _rsakp
+#endif
{
+ /*!\var n
+ * \brief The modulus.
+ *
+ * \f$n=pq\f$
+ */
mpbarrett n;
+ /*!\var e
+ * \brief The public exponent.
+ */
mpnumber e;
+ /*!\var d
+ * \brief The private exponent.
+ */
mpnumber d;
+ /*!\var p
+ * \brief The first prime factor of the modulus.
+ */
mpbarrett p;
+ /*!\var q
+ * \brief The second prime factor of the modulus.
+ */
mpbarrett q;
- mpnumber d1;
- mpnumber d2;
- mpnumber c;
-} rsakp;
+ /*!\var dp
+ * \brief the first prime coefficient.
+ * \f$dp=d\ \textrm{mod}\ (p-1)\f$
+ */
+ mpnumber dp;
+ /*!\var dq
+ * \brief the second prime coefficient.
+ * \f$dq=d\ \textrm{mod}\ (q-1)\f$
+ */
+ mpnumber dq;
+ /*!\var qi
+ * \brief the crt coefficient.
+ * \f$qi=q^{-1}\ \textrm{mod}\ p\f$
+ */
+ mpnumber qi;
+ #ifdef __cplusplus
+ rsakp();
+ rsakp(const rsakp&);
+ ~rsakp();
+ #endif
+};
+
+#ifndef __cplusplus
+typedef struct _rsakp rsakp;
+#endif
#ifdef __cplusplus
extern "C" {
#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int rsakpMake(rsakp* kp, randomGeneratorContext* rgc, size_t nsize)
- /*@modifies kp, rgc @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int rsakpInit(rsakp* kp)
- /*@modifies kp @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int rsakpFree(rsakp* kp)
- /*@modifies kp @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int rsakpCopy(rsakp* dst, const rsakp* src)
- /*@modifies dst @*/;
+BEECRYPTAPI
+int rsakpMake(rsakp*, randomGeneratorContext*, size_t);
+BEECRYPTAPI
+int rsakpInit(rsakp*);
+BEECRYPTAPI
+int rsakpFree(rsakp*);
+BEECRYPTAPI
+int rsakpCopy(rsakp*, const rsakp*);
#ifdef __cplusplus
}
* \ingroup IF_m IF_rsa_m
*/
-#include "system.h"
-#include "rsapk.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/rsapk.h"
/*!\addtogroup IF_rsa_m
* \{
int rsapkInit(rsapk* pk)
{
- memset(pk, 0, sizeof(*pk));
+ memset(pk, 0, sizeof(rsapk));
/* or
mpbzero(&pk->n);
mpnzero(&pk->e);
int rsapkFree(rsapk* pk)
{
- /*@-usereleased -compdef @*/ /* pk->n.modl is OK */
mpbfree(&pk->n);
mpnfree(&pk->e);
return 0;
- /*@=usereleased =compdef @*/
}
int rsapkCopy(rsapk* dst, const rsapk* src)
#ifndef _RSAPK_H
#define _RSAPK_H
-#include "mpbarrett.h"
+#include "beecrypt/mpbarrett.h"
-/**
- */
-typedef struct
+#ifdef __cplusplus
+struct BEECRYPTAPI rsapk
+#else
+struct _rsapk
+#endif
{
mpbarrett n;
mpnumber e;
-} rsapk;
+ #ifdef __cplusplus
+ rsapk();
+ rsapk(const rsapk&);
+ ~rsapk();
+ #endif
+};
+
+#ifndef __cplusplus
+typedef struct _rsapk rsapk;
+#endif
#ifdef __cplusplus
extern "C" {
#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int rsapkInit(rsapk* pk)
- /*@modifies pk @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int rsapkFree(rsapk* pk)
- /*@modifies pk @*/;
-
-/**
- */
-BEECRYPTAPI /*@unused@*/
-int rsapkCopy(rsapk* dst, const rsapk* src)
- /*@modifies dst @*/;
+BEECRYPTAPI
+int rsapkInit(rsapk*);
+BEECRYPTAPI
+int rsapkFree(rsapk*);
+BEECRYPTAPI
+int rsapkCopy(rsapk*, const rsapk*);
#ifdef __cplusplus
}
* \author Bob Deblier <bob.deblier@pandora.be>
* \ingroup HASH_m HASH_sha1_m
*/
+
+#define BEECRYPT_DLL_EXPORT
-#include "system.h"
-#include "beecrypt.h"
-#include "sha1opt.h"
-#include "sha1.h"
-#include "mp.h"
-#include "endianness.h"
-#include "debug.h"
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/sha1.h"
+#include "beecrypt/endianness.h"
/*!\addtogroup HASH_sha1_m
* \{
*/
-/** \ingroup HASH_sha1_m
- */
-/*@observer@*/ /*@unchecked@*/
static const uint32_t k[4] = { 0x5a827999U, 0x6ed9eba1U, 0x8f1bbcdcU, 0xca62c1d6U };
-/** \ingroup HASH_sha1_m
- */
-/*@observer@*/ /*@unchecked@*/
static const uint32_t hinit[5] = { 0x67452301U, 0xefcdab89U, 0x98badcfeU, 0x10325476U, 0xc3d2e1f0U };
-/*@-sizeoftype@*/
const hashFunction sha1 = {
"SHA-1",
sizeof(sha1Param),
- 64U,
- 5U * sizeof(uint32_t),
+ 64,
+ 20,
(hashFunctionReset) sha1Reset,
(hashFunctionUpdate) sha1Update,
(hashFunctionDigest) sha1Digest
};
-/*@=sizeoftype@*/
-int sha1Reset(sha1Param* sp)
+int sha1Reset(register sha1Param* p)
{
- memcpy(sp->h, hinit, sizeof(sp->h));
- memset(sp->data, 0, sizeof(sp->data));
+ memcpy(p->h, hinit, 5 * sizeof(uint32_t));
+ memset(p->data, 0, 80 * sizeof(uint32_t));
#if (MP_WBITS == 64)
- mpzero(1, sp->length);
+ mpzero(1, p->length);
#elif (MP_WBITS == 32)
- mpzero(2, sp->length);
+ mpzero(2, p->length);
#else
# error
#endif
- sp->offset = 0;
+ p->offset = 0;
return 0;
}
mpw add[1];
mpsetw(1, add, size);
mplshift(1, add, 3);
- (void) mpadd(1, sp->length, add);
+ mpadd(1, sp->length, add);
#elif (MP_WBITS == 32)
mpw add[2];
mpsetw(2, add, size);
mplshift(2, add, 3);
- (void) mpadd(2, sp->length, add);
+ mpadd(2, sp->length, add);
#else
# error
#endif
-/*@-type@*/
while (size > 0)
{
proclength = ((sp->offset + size) > 64U) ? (64U - sp->offset) : size;
- memmove(((byte *) sp->data) + sp->offset, data, proclength);
+ memcpy(((byte *) sp->data) + sp->offset, data, proclength);
size -= proclength;
data += proclength;
sp->offset += proclength;
- if (sp->offset == 64U)
+ if (sp->offset == 64)
{
sha1Process(sp);
sp->offset = 0;
}
}
-/*@=type@*/
return 0;
}
-/** \ingroup HASH_sha1_m
- */
static void sha1Finish(sha1Param* sp)
- /*@modifies sp @*/
{
register byte *ptr = ((byte *) sp->data) + sp->offset++;
*(ptr++) = 0x80;
-/*@-type@*/
if (sp->offset > 56)
{
while (sp->offset++ < 64)
ptr = ((byte*) sp->data) + sp->offset;
while (sp->offset++ < 56)
*(ptr++) = 0;
-/*@=type@*/
#if WORDS_BIGENDIAN
- memcpy(ptr, sp->length, sizeof(sp->length));
+ memcpy(ptr, sp->length, 8);
#else
# if (MP_WBITS == 64)
ptr[0] = (byte)(sp->length[0] >> 56);
sp->offset = 0;
}
-int sha1Digest(sha1Param* sp, byte* digest)
+int sha1Digest(sha1Param* sp, byte* data)
{
sha1Finish(sp);
#if WORDS_BIGENDIAN
- memcpy(digest, sp->h, sizeof(sp->h));
+ memcpy(data, sp->h, 20);
#else
/* encode 5 integers big-endian style */
- digest[ 0] = (byte)(sp->h[0] >> 24);
- digest[ 1] = (byte)(sp->h[0] >> 16);
- digest[ 2] = (byte)(sp->h[0] >> 8);
- digest[ 3] = (byte)(sp->h[0] >> 0);
- digest[ 4] = (byte)(sp->h[1] >> 24);
- digest[ 5] = (byte)(sp->h[1] >> 16);
- digest[ 6] = (byte)(sp->h[1] >> 8);
- digest[ 7] = (byte)(sp->h[1] >> 0);
- digest[ 8] = (byte)(sp->h[2] >> 24);
- digest[ 9] = (byte)(sp->h[2] >> 16);
- digest[10] = (byte)(sp->h[2] >> 8);
- digest[11] = (byte)(sp->h[2] >> 0);
- digest[12] = (byte)(sp->h[3] >> 24);
- digest[13] = (byte)(sp->h[3] >> 16);
- digest[14] = (byte)(sp->h[3] >> 8);
- digest[15] = (byte)(sp->h[3] >> 0);
- digest[16] = (byte)(sp->h[4] >> 24);
- digest[17] = (byte)(sp->h[4] >> 16);
- digest[18] = (byte)(sp->h[4] >> 8);
- digest[19] = (byte)(sp->h[4] >> 0);
+ data[ 0] = (byte)(sp->h[0] >> 24);
+ data[ 1] = (byte)(sp->h[0] >> 16);
+ data[ 2] = (byte)(sp->h[0] >> 8);
+ data[ 3] = (byte)(sp->h[0] >> 0);
+ data[ 4] = (byte)(sp->h[1] >> 24);
+ data[ 5] = (byte)(sp->h[1] >> 16);
+ data[ 6] = (byte)(sp->h[1] >> 8);
+ data[ 7] = (byte)(sp->h[1] >> 0);
+ data[ 8] = (byte)(sp->h[2] >> 24);
+ data[ 9] = (byte)(sp->h[2] >> 16);
+ data[10] = (byte)(sp->h[2] >> 8);
+ data[11] = (byte)(sp->h[2] >> 0);
+ data[12] = (byte)(sp->h[3] >> 24);
+ data[13] = (byte)(sp->h[3] >> 16);
+ data[14] = (byte)(sp->h[3] >> 8);
+ data[15] = (byte)(sp->h[3] >> 0);
+ data[16] = (byte)(sp->h[4] >> 24);
+ data[17] = (byte)(sp->h[4] >> 16);
+ data[18] = (byte)(sp->h[4] >> 8);
+ data[19] = (byte)(sp->h[4] >> 0);
#endif
- (void) sha1Reset(sp);
+ sha1Reset(sp);
return 0;
}
#ifndef _SHA1_H
#define _SHA1_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/sha1opt.h"
-/** \ingroup HASH_sha1_m
+/*!\brief Holds all the parameters necessary for the SHA-1 algorithm.
+ * \ingroup HASH_sha1_m
*/
typedef struct
{
+ /*!\var h
+ */
uint32_t h[5];
+ /*!\var data
+ */
uint32_t data[80];
+ /*!\var length
+ * \brief Multi-precision integer counter for the bits that have been
+ * processed so far.
+ */
#if (MP_WBITS == 64)
mpw length[1];
#elif (MP_WBITS == 32)
#else
# error
#endif
+ /*!\var offset
+ * \brief Offset into \a data; points to the place where new data will be
+ * copied before it is processed.
+ */
uint32_t offset;
} sha1Param;
extern "C" {
#endif
-/** \ingroup HASH_sha1_m
- * Holds the full API description of the SHA-1 algorithm.
+/*!\var sha1
+ * \brief Holds the full API description of the SHA-1 algorithm.
*/
-/*@observer@*/ /*@unchecked@*/
extern BEECRYPTAPI const hashFunction sha1;
-/** \ingroup HASH_sha1_m
- * This function performs the SHA-1 hash algorithm on 64 byte blocks of data.
- * @param sp hash parameter block
+/*!\fn void sha1Process(sha1Param* sp)
+ * \brief This function performs the core of the SHA-1 hash algorithm; it
+ * processes a block of 64 bytes.
+ * \param sp The hash function's parameter block.
*/
BEECRYPTAPI
-void sha1Process(sha1Param* sp)
- /*@modifies sp @*/;
+void sha1Process(sha1Param* sp);
-/** \ingroup HASH_sha1_m
- * This function resets the parameter block so that it's ready for a new hash.
- * @param sp hash parameter block
- * @return 0 on success
+/*!\fn int sha1Reset(sha1Param* sp)
+ * \brief This function resets the parameter block so that it's ready for a
+ * new hash.
+ * \param sp The hash function's parameter block.
+ * \retval 0 on success.
*/
-BEECRYPTAPI /*@unused@*/
-int sha1Reset (sha1Param* sp)
- /*@modifies sp @*/;
+BEECRYPTAPI
+int sha1Reset (sha1Param* sp);
-/** \ingroup HASH_sha1_m
- * This function should be used to pass successive blocks of data to be hashed.
- * @param sp hash parameter block
- * @param *data bytes to hash
- * @param size no. of bytes to hash
- * @return 0 on success
+/*!\fn int sha1Update(sha1Param* sp, const byte* data, size_t size)
+ * \brief This function should be used to pass successive blocks of data
+ * to be hashed.
+ * \param sp The hash function's parameter block.
+ * \param data
+ * \param size
+ * \retval 0 on success.
*/
-BEECRYPTAPI /*@unused@*/
-int sha1Update (sha1Param* sp, const byte* data, size_t size)
- /*@modifies sp @*/;
+BEECRYPTAPI
+int sha1Update (sha1Param* sp, const byte* data, size_t size);
-/** \ingroup HASH_sha1_m
- * This function finishes the current hash computation, returning the digest
- * value in \a digest.
- * @param sp hash parameter block
- * @retval *digest 20 byte SHA-1 digest
- * @return 0 on success
+/*!\fn int sha1Digest(sha1Param* sp, byte* digest)
+ * \brief This function finishes the current hash computation and copies
+ * the digest value into \a digest.
+ * \param sp The hash function's parameter block.
+ * \param digest The place to store the 20-byte digest.
+ * \retval 0 on success.
*/
-BEECRYPTAPI /*@unused@*/
-int sha1Digest (sha1Param* sp, /*@out@*/ byte* digest)
- /*@modifies sp, digest @*/;
+BEECRYPTAPI
+int sha1Digest (sha1Param* sp, byte* digest);
#ifdef __cplusplus
}
-/** \ingroup HASH_sha1_m HASH_m
- * \file sha1opt.h
- *
- * SHA-1 assembler-optimized routines, header.
- */
-
/*
+ * sha1opt.h
+ *
+ * SHA-1 assembler-optimized routines, header
+ *
* Copyright (c) 2000, 2003 Virtual Unlimited B.V.
*
+ * Author: Bob Deblier <bob.deblier@pandora.be>
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
#ifndef _SHA1OPT_H
#define _SHA1OPT_H
+#include "beecrypt/beecrypt.h"
+#include "beecrypt/sha1.h"
+
#ifdef __cplusplus
extern "C" {
#endif
* \ingroup HASH_m HASH_sha256_m
*/
-#include "system.h"
-#include "sha256.h"
-#include "mp.h"
-#include "endianness.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/sha256.h"
+#include "beecrypt/endianness.h"
/*!\addtogroup HASH_sha256_m
* \{
*/
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static const uint32_t k[64] = {
0x428a2f98U, 0x71374491U, 0xb5c0fbcfU, 0xe9b5dba5U, 0x3956c25bU, 0x59f111f1U, 0x923f82a4U, 0xab1c5ed5U,
0xd807aa98U, 0x12835b01U, 0x243185beU, 0x550c7dc3U, 0x72be5d74U, 0x80deb1feU, 0x9bdc06a7U, 0xc19bf174U,
0x748f82eeU, 0x78a5636fU, 0x84c87814U, 0x8cc70208U, 0x90befffaU, 0xa4506cebU, 0xbef9a3f7U, 0xc67178f2U
};
-/**
- */
-/*@observer@*/ /*@unchecked@*/
static const uint32_t hinit[8] = {
0x6a09e667U, 0xbb67ae85U, 0x3c6ef372U, 0xa54ff53aU, 0x510e527fU, 0x9b05688cU, 0x1f83d9abU, 0x5be0cd19U
};
-/*@-sizeoftype@*/
-const hashFunction sha256 = {
- "SHA-256",
- sizeof(sha256Param),
- 64U,
- 8U * sizeof(uint32_t),
- (hashFunctionReset) sha256Reset,
- (hashFunctionUpdate) sha256Update,
- (hashFunctionDigest) sha256Digest
-};
-/*@=sizeoftype@*/
+const hashFunction sha256 = { "SHA-256", sizeof(sha256Param), 64, 32, (hashFunctionReset) sha256Reset, (hashFunctionUpdate) sha256Update, (hashFunctionDigest) sha256Digest };
-int sha256Reset(sha256Param* sp)
+int sha256Reset(register sha256Param* sp)
{
- memcpy(sp->h, hinit, sizeof(sp->h));
- memset(sp->data, 0, sizeof(sp->data));
- memset(&sp->length, 0, sizeof(sp->length));
+ memcpy(sp->h, hinit, 8 * sizeof(uint32_t));
+ memset(sp->data, 0, 64 * sizeof(uint32_t));
+ #if (MP_WBITS == 64)
+ mpzero(1, sp->length);
+ #elif (MP_WBITS == 32)
+ mpzero(2, sp->length);
+ #else
+ # error
+ #endif
sp->offset = 0;
return 0;
}
d += temp
#ifndef ASM_SHA256PROCESS
-void sha256Process(sha256Param* sp)
+void sha256Process(register sha256Param* sp)
{
register uint32_t a, b, c, d, e, f, g, h, temp;
register uint32_t *w;
t = 16;
while (t--)
{
- temp = swapu32(*w);
+ register uint32_t temp = swapu32(*w);
*(w++) = temp;
}
#endif
t = 48;
while (t--)
{
- temp = sig1(w[-2]) + w[-7] + sig0(w[-15]) + w[-16];
+ register uint32_t temp = sig1(w[-2]) + w[-7] + sig0(w[-15]) + w[-16];
*(w++) = temp;
}
}
#endif
-int sha256Update(sha256Param* sp, const byte* data, size_t size)
+int sha256Update(register sha256Param* sp, const byte* data, size_t size)
{
register uint32_t proclength;
mpw add[1];
mpsetw(1, add, size);
mplshift(1, add, 3);
- (void) mpadd(1, sp->length, add);
+ mpadd(1, sp->length, add);
#elif (MP_WBITS == 32)
mpw add[2];
mpsetw(2, add, size);
mplshift(2, add, 3);
- (void) mpadd(2, sp->length, add);
+ mpadd(2, sp->length, add);
#else
# error
#endif
-/*@-type@*/
while (size > 0)
{
proclength = ((sp->offset + size) > 64U) ? (64U - sp->offset) : size;
- memmove(((byte *) sp->data) + sp->offset, data, proclength);
+ memcpy(((byte *) sp->data) + sp->offset, data, proclength);
size -= proclength;
data += proclength;
sp->offset += proclength;
sp->offset = 0;
}
}
-/*@=type@*/
return 0;
}
-/**
- */
-static void sha256Finish(sha256Param* sp)
- /*@globals internalState @*/
- /*@modifies sp, internalState @*/
+static void sha256Finish(register sha256Param* sp)
{
register byte *ptr = ((byte *) sp->data) + sp->offset++;
*(ptr++) = 0x80;
-/*@-type@*/
if (sp->offset > 56)
{
while (sp->offset++ < 64)
ptr = ((byte *) sp->data) + sp->offset;
while (sp->offset++ < 56)
*(ptr++) = 0;
-/*@=type@*/
#if (MP_WBITS == 64)
ptr[0] = (byte)(sp->length[0] >> 56);
sp->offset = 0;
}
-int sha256Digest(sha256Param* sp, byte* digest)
+int sha256Digest(register sha256Param* sp, byte* data)
{
sha256Finish(sp);
/* encode 8 integers big-endian style */
- digest[ 0] = (byte)(sp->h[0] >> 24);
- digest[ 1] = (byte)(sp->h[0] >> 16);
- digest[ 2] = (byte)(sp->h[0] >> 8);
- digest[ 3] = (byte)(sp->h[0] >> 0);
- digest[ 4] = (byte)(sp->h[1] >> 24);
- digest[ 5] = (byte)(sp->h[1] >> 16);
- digest[ 6] = (byte)(sp->h[1] >> 8);
- digest[ 7] = (byte)(sp->h[1] >> 0);
- digest[ 8] = (byte)(sp->h[2] >> 24);
- digest[ 9] = (byte)(sp->h[2] >> 16);
- digest[10] = (byte)(sp->h[2] >> 8);
- digest[11] = (byte)(sp->h[2] >> 0);
- digest[12] = (byte)(sp->h[3] >> 24);
- digest[13] = (byte)(sp->h[3] >> 16);
- digest[14] = (byte)(sp->h[3] >> 8);
- digest[15] = (byte)(sp->h[3] >> 0);
- digest[16] = (byte)(sp->h[4] >> 24);
- digest[17] = (byte)(sp->h[4] >> 16);
- digest[18] = (byte)(sp->h[4] >> 8);
- digest[19] = (byte)(sp->h[4] >> 0);
- digest[20] = (byte)(sp->h[5] >> 24);
- digest[21] = (byte)(sp->h[5] >> 16);
- digest[22] = (byte)(sp->h[5] >> 8);
- digest[23] = (byte)(sp->h[5] >> 0);
- digest[24] = (byte)(sp->h[6] >> 24);
- digest[25] = (byte)(sp->h[6] >> 16);
- digest[26] = (byte)(sp->h[6] >> 8);
- digest[27] = (byte)(sp->h[6] >> 0);
- digest[28] = (byte)(sp->h[7] >> 24);
- digest[29] = (byte)(sp->h[7] >> 16);
- digest[30] = (byte)(sp->h[7] >> 8);
- digest[31] = (byte)(sp->h[7] >> 0);
-
- (void) sha256Reset(sp);
+ data[ 0] = (byte)(sp->h[0] >> 24);
+ data[ 1] = (byte)(sp->h[0] >> 16);
+ data[ 2] = (byte)(sp->h[0] >> 8);
+ data[ 3] = (byte)(sp->h[0] >> 0);
+ data[ 4] = (byte)(sp->h[1] >> 24);
+ data[ 5] = (byte)(sp->h[1] >> 16);
+ data[ 6] = (byte)(sp->h[1] >> 8);
+ data[ 7] = (byte)(sp->h[1] >> 0);
+ data[ 8] = (byte)(sp->h[2] >> 24);
+ data[ 9] = (byte)(sp->h[2] >> 16);
+ data[10] = (byte)(sp->h[2] >> 8);
+ data[11] = (byte)(sp->h[2] >> 0);
+ data[12] = (byte)(sp->h[3] >> 24);
+ data[13] = (byte)(sp->h[3] >> 16);
+ data[14] = (byte)(sp->h[3] >> 8);
+ data[15] = (byte)(sp->h[3] >> 0);
+ data[16] = (byte)(sp->h[4] >> 24);
+ data[17] = (byte)(sp->h[4] >> 16);
+ data[18] = (byte)(sp->h[4] >> 8);
+ data[19] = (byte)(sp->h[4] >> 0);
+ data[20] = (byte)(sp->h[5] >> 24);
+ data[21] = (byte)(sp->h[5] >> 16);
+ data[22] = (byte)(sp->h[5] >> 8);
+ data[23] = (byte)(sp->h[5] >> 0);
+ data[24] = (byte)(sp->h[6] >> 24);
+ data[25] = (byte)(sp->h[6] >> 16);
+ data[26] = (byte)(sp->h[6] >> 8);
+ data[27] = (byte)(sp->h[6] >> 0);
+ data[28] = (byte)(sp->h[7] >> 24);
+ data[29] = (byte)(sp->h[7] >> 16);
+ data[30] = (byte)(sp->h[7] >> 8);
+ data[31] = (byte)(sp->h[7] >> 0);
+
+ sha256Reset(sp);
return 0;
}
#ifndef _SHA256_H
#define _SHA256_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
-/** \ingroup HASH_sha256_m
+/*!\brief Holds all the parameters necessary for the SHA-256 algorithm.
+ * \ingroup HASH_sha256_m
*/
typedef struct
{
+ /*!\var h
+ */
uint32_t h[8];
+ /*!\var data
+ */
uint32_t data[64];
+ /*!\var length
+ * \brief Multi-precision integer counter for the bits that have been
+ * processed so far.
+ */
#if (MP_WBITS == 64)
mpw length[1];
#elif (MP_WBITS == 32)
#else
# error
#endif
+ /*!\var offset
+ * \brief Offset into \a data; points to the place where new data will be
+ * copied before it is processed.
+ */
uint32_t offset;
} sha256Param;
extern "C" {
#endif
-/** \ingroup HASH_sha256_m
- * Holds the full API description of the SHA-256 algorithm.
+/*!\var sha256
+ * \brief Holds the full API description of the SHA-256 algorithm.
*/
-/*@observer@*/ /*@checked@*/
extern BEECRYPTAPI const hashFunction sha256;
-/*@-exportlocal@*/
-/** \ingroup HASH_sha256_m
- * This function performs the SHA-256 hash algorithm on 64 byte blocks of data.
- * @param sp hash parameter block
+/*!\fn void sha256Process(sha256Param* sp)
+ * \brief This function performs the core of the SHA-256 hash algorithm; it
+ * processes a block of 64 bytes.
+ * \param sp The hash function's parameter block.
*/
BEECRYPTAPI
-void sha256Process(sha256Param* sp)
- /*@globals internalState @*/
- /*@modifies sp, internalState @*/;
+void sha256Process(sha256Param* sp);
-/** \ingroup HASH_sha256_m
- * This function resets the parameter block so that it's ready for a new hash.
- * @param sp hash parameter block
- * @return 0 on success
+/*!\fn int sha256Reset(sha256Param* sp)
+ * \brief This function resets the parameter block so that it's ready for a
+ * new hash.
+ * \param sp The hash function's parameter block.
+ * \retval 0 on success.
*/
BEECRYPTAPI
-int sha256Reset (sha256Param* sp)
- /*@modifies sp @*/;
+int sha256Reset (sha256Param* sp);
-/** \ingroup HASH_sha256_m
- * This function should be used to pass successive blocks of data to be hashed.
- * @param sp hash parameter block
- * @param *data bytes to hash
- * @param size no. of bytes to hash
- * @return 0 on success
+/*!\fn int sha256Update(sha256Param* sp, const byte* data, size_t size)
+ * \brief This function should be used to pass successive blocks of data
+ * to be hashed.
+ * \param sp The hash function's parameter block.
+ * \param data
+ * \param size
+ * \retval 0 on success.
*/
BEECRYPTAPI
-int sha256Update (sha256Param* sp, const byte* data, size_t size)
- /*@globals internalState @*/
- /*@modifies sp, internalState @*/;
+int sha256Update (sha256Param* sp, const byte* data, size_t size);
-/** \ingroup HASH_sha256_m
- * This function finishes the current hash computation, returning the digest
- * value in \a digest.
- * @param sp hash parameter block
- * @retval *digest 32 byte SHA-256 digest
- * @return 0 on success
+/*!\fn int sha256Digest(sha256Param* sp, byte* digest)
+ * \brief This function finishes the current hash computation and copies
+ * the digest value into \a digest.
+ * \param sp The hash function's parameter block.
+ * \param digest The place to store the 32-byte digest.
+ * \retval 0 on success.
*/
BEECRYPTAPI
-int sha256Digest (sha256Param* sp, /*@out@*/ byte* digest)
- /*@globals internalState @*/
- /*@modifies sp, digest, internalState @*/;
-/*@=exportlocal@*/
+int sha256Digest (sha256Param* sp, byte* digest);
#ifdef __cplusplus
}
+++ /dev/null
-/**
- * \file beecrypt/system.h
- */
-
-#ifndef H_SYSTEM
-#define H_SYSTEM
-
-#define BEECRYPT_DLL_EXPORT
-
-#if defined(_WIN32) && !defined(WIN32)
-# define WIN32 1
-#endif
-
-#if WIN32 && !__CYGWIN32__
-# include "config.win.h"
-#else
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-#endif
-
-#if defined(__LCLINT__)
-/* XXX from /usr/include/bits/sigest.h in glibc-2.2.4 */
-/*@-sizeoftype@*/
-# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
-/*@-redef@*/
-typedef struct
- {
- unsigned long int __val[_SIGSET_NWORDS];
- } __sigset_t;
-/*@=redef@*/
-/*@=sizeoftype@*/
-#endif
-
-#include "beecrypt.gnu.h"
-
-#if HAVE_SYS_STAT_H
-# include <sys/types.h>
-# include <sys/stat.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
-#if HAVE_TIME_H
-# include <time.h>
-#endif
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
-
-#if HAVE_ERRNO_H
-# include <errno.h>
-#endif
-
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#else
-# include <sys/file.h>
-#endif
-
-#if HAVE_CTYPE_H
-# include <ctype.h>
-#endif
-
-#if HAVE_MALLOC_H && !defined(__LCLINT__)
-# include <malloc.h>
-#endif
-
-#endif /* H_SYSTEM */
+++ /dev/null
-.deps
-.depend
-.depend-done
-.libs
-Makefile
-Makefile.in
-config.cache
-config.guess
-config.log
-config.status
-config.sub
-configure
-libtool
-ltconfig
-ltmain.sh
-*.o
-*.lo
-stamp-h
-stamp-h.in
-base64bug
-beetest
-benchbc
-benchhf
-benchme
-openpgp
-testaes
-testblowfish
-testdldp
-testdsa
-testhmacmd5
-testhmacsha1
-testmd5
-testmp
-testmpinv
-testrsa
-testsha1
-testsha256
testdldp_SOURCES = testdldp.c
-EXTRA_PROGRAMS = benchme benchhf benchbc
+EXTRA_PROGRAMS = benchme benchhf benchbc testconv
benchme_SOURCES = benchme.c
benchbc_SOURCES = benchbc.c
+testconv_SOURCES = testconv.c
+
# Run every benchmark test twice
bench: benchme benchhf benchbc
./benchme
+++ /dev/null
-/*@-compdef@*/
-/*
- * beetest.c
- *
- * BeeCrypt test and benchmark application
- *
- * Copyright (c) 1999, 2000, 2001, 2002 Virtual Unlimited B.V.
- *
- * Author: Bob Deblier <bob@virtualunlimited.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * 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,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "system.h"
-#include "beecrypt.h"
-#include "blockmode.h"
-#include "aes.h"
-#include "blowfish.h"
-#include "mpbarrett.h"
-#include "dhaes.h"
-#include "dlkp.h"
-#include "dsa.h"
-#include "elgamal.h"
-#include "hmacmd5.h"
-#include "md5.h"
-#include "rsa.h"
-#include "sha1.h"
-#include "sha256.h"
-#include "mp.h"
-#include "debug.h"
-
-/*@unchecked@*/ /*@observer@*/ /*@unused@*/
-static const char* dsa_p = "8df2a494492276aa3d25759bb06869cbeac0d83afb8d0cf7cbb8324f0d7882e5d0762fc5b7210eafc2e9adac32ab7aac49693dfbf83724c2ec0736ee31c80291";
-/*@unchecked@*/ /*@observer@*/ /*@unused@*/
-static const char* dsa_q = "c773218c737ec8ee993b4f2ded30f48edace915f";
-/*@unchecked@*/ /*@observer@*/ /*@unused@*/
-static const char* dsa_g = "626d027839ea0a13413163a55b4cb500299d5522956cefcb3bff10f399ce2c2e71cb9de5fa24babf58e5b79521925c9cc42e9f6f464b088cc572af53e6d78802";
-/*@unchecked@*/ /*@observer@*/ /*@unused@*/
-static const char* dsa_x = "2070b3223dba372fde1c0ffc7b2e3b498b260614";
-/*@unchecked@*/ /*@observer@*/ /*@unused@*/
-static const char* dsa_y = "19131871d75b1612a819f29d78d1b0d7346f7aa77bb62a859bfd6c5675da9d212d3a36ef1672ef660b8c7c255cc0ec74858fba33f44c06699630a76b030ee333";
-/*@unchecked@*/ /*@observer@*/ /*@unused@*/
-static const char* elg_n = "8df2a494492276aa3d25759bb06869cbeac0d83afb8d0cf7cbb8324f0d7882e5d0762fc5b7210eafc2e9adac32ab7aac49693dfbf83724c2ec0736ee31c80290";
-
-/*@unused@*/
-static int testVectorInvMod(const dlkp_p* keypair)
- /*@*/
-{
- randomGeneratorContext rngc;
- int rc = -1;
-
-/*@-branchstate@*/
- /*@-modobserver -usedef @*/
- if (randomGeneratorContextInit(&rngc, randomGeneratorDefault()) == 0)
- /*@=modobserver =usedef @*/
- {
- register size_t size = keypair->param.p.size;
- register mpw* temp = (mpw*) malloc((8*size+6) * sizeof(*temp));
-
- assert(temp != NULL);
- mpbrndinv_w(&keypair->param.n, &rngc, temp, temp+size, temp+2*size);
-
- mpbmulmod_w(&keypair->param.n, size, temp, size, temp+size, temp, temp+2*size);
-
- rc = mpisone(size, temp);
-
- free(temp);
-
- /*@-modobserver -usedef @*/
- (void) randomGeneratorContextFree(&rngc);
- /*@=modobserver =usedef @*/
- }
-/*@=branchstate@*/
- return rc;
-}
-
-/*@unused@*/
-static int testVectorExpMod(const dlkp_p* keypair)
- /*@*/
-{
- int rc;
- mpnumber y;
-
- mpnzero(&y);
-
- mpbnpowmod(&keypair->param.p, &keypair->param.g, &keypair->x, &y);
-
- rc = mpeqx(y.size, y.data, keypair->y.size, keypair->y.data);
-
- mpnfree(&y);
-
- return rc;
-}
-
-/*@unused@*/
-static int testVectorElGamalV1(const dlkp_p* keypair)
- /*@*/
-{
- int rc = 0;
-
- randomGeneratorContext rngc;
-
-/*@-branchstate@*/
- /*@-modobserver -usedef @*/
- if (randomGeneratorContextInit(&rngc, randomGeneratorDefault()) == 0)
- /*@=modobserver =usedef @*/
- {
- mpnumber digest, r, s;
-
- mpnzero(&digest);
- mpnzero(&r);
- mpnzero(&s);
-
- mpnsize(&digest, 5);
- memset(digest.data, 0, digest.size * sizeof(*digest.data));
-
-/*@-noeffectuncon@*/
- (void) rngc.rng->next(rngc.param, digest.data, digest.size);
-/*@=noeffectuncon@*/
-
- (void) elgv1sign(&keypair->param.p, &keypair->param.n, &keypair->param.g, &rngc, &digest, &keypair->x, &r, &s);
-
- rc = elgv1vrfy(&keypair->param.p, &keypair->param.n, &keypair->param.g, &digest, &keypair->y, &r, &s);
-
- mpnfree(&digest);
- mpnfree(&r);
- mpnfree(&s);
-
- /*@-modobserver -usedef @*/
- (void) randomGeneratorContextFree(&rngc);
- /*@=modobserver =usedef @*/
- }
-/*@=branchstate@*/
- return rc;
-}
-
-/*@unused@*/
-static int testVectorElGamalV3(const dlkp_p* keypair)
- /*@*/
-{
- int rc = 0;
-
- randomGeneratorContext rngc;
-
-/*@-branchstate@*/
- /*@-modobserver -usedef @*/
- if (randomGeneratorContextInit(&rngc, randomGeneratorDefault()) == 0)
- /*@=modobserver =usedef @*/
- {
- mpnumber digest, r, s;
-
- mpnzero(&digest);
- mpnzero(&r);
- mpnzero(&s);
-
- mpnsize(&digest, 5);
- memset(digest.data, 0, digest.size * sizeof(*digest.data));
-
-/*@-noeffectuncon@*/
- (void) rngc.rng->next(rngc.param, digest.data, digest.size);
-/*@=noeffectuncon@*/
-
- (void) elgv3sign(&keypair->param.p, &keypair->param.n, &keypair->param.g, &rngc, &digest, &keypair->x, &r, &s);
-
- rc = elgv3vrfy(&keypair->param.p, &keypair->param.n, &keypair->param.g, &digest, &keypair->y, &r, &s);
-
- mpnfree(&digest);
- mpnfree(&r);
- mpnfree(&s);
-
- /*@-modobserver -usedef @*/
- (void) randomGeneratorContextFree(&rngc);
- /*@=modobserver =usedef @*/
- }
-/*@=branchstate@*/
- return rc;
-}
-
-/*@unchecked@*/ /*@observer@*/
-static uint32_t keyValue[] =
-{
- 0x00010203,
- 0x04050607,
- 0x08090a0b,
- 0x0c0d0e0f,
- 0x10111213,
- 0x14151617,
- 0x18191a1b,
- 0x1c1d1e1f,
- 0x20212223,
- 0x24252627,
- 0x28292a2b,
- 0x2c2d2e2f,
- 0x30313233,
- 0x34353637,
- 0x38393a3b,
- 0x3c3d3e3f
-};
-
-static void testBlockInit(uint8_t* block, size_t length)
- /*@modifies *block @*/
-{
- register unsigned int i;
- for (i = 1U; i <= length; i++) {
- *block = (uint8_t) i;
- block++;
- }
-}
-
-static void testBlockCiphers(void)
- /*@globals fileSystem, internalState @*/
- /*@modifies fileSystem, internalState @*/
-{
- unsigned int k;
- int i;
-
- printf("Timing the blockciphers:\n");
-
- for (i = 0; i < blockCipherCount(); i++)
- {
- const blockCipher* tmp = blockCipherGet(i);
-
- if (tmp)
- {
- size_t blockwords = tmp->blocksize >> 2;
-
- mpw* src_block = (mpw*) calloc(1, 2 * blockwords * sizeof(*src_block));
- mpw* enc_block = (mpw*) malloc(2 * blockwords * sizeof(*enc_block));
- mpw* dec_block = (mpw*) malloc(2 * blockwords * sizeof(*dec_block));
- mpw* spd_block = (mpw*) malloc(1024 * 1024 * blockwords * sizeof(*spd_block));
-
- void* encrypt_param = (void*) malloc(tmp->paramsize);
- void* decrypt_param = (void*) malloc(tmp->paramsize);
-
- assert(src_block != NULL);
- assert(enc_block != NULL);
- assert(dec_block != NULL);
- assert(spd_block != NULL);
- assert(encrypt_param != NULL);
- assert(decrypt_param != NULL);
-
- printf(" %s:\n", tmp->name);
-
- for (k = tmp->keybitsmin; k <= tmp->keybitsmax; k += tmp->keybitsinc)
- {
- printf(" setup encrypt (%u bits key): ", k);
- if (tmp->setup(encrypt_param, keyValue, k, ENCRYPT) < 0)
- {
- printf("failed\n");
- /*@innercontinue@*/ continue;
- }
- printf("ok\n");
- printf(" setup decrypt (%u bits key): ", k);
- if (tmp->setup(decrypt_param, keyValue, k, DECRYPT) < 0)
- {
- printf("failed\n");
- /*@innercontinue@*/ continue;
- }
- printf("ok\n");
- printf(" encrypt/decrypt test block: ");
- testBlockInit((uint8_t*) src_block, tmp->blocksize >> 2);
-
- (void) blockEncryptCBC(tmp, encrypt_param, enc_block, src_block, 2U);
- (void) blockDecryptCBC(tmp, decrypt_param, dec_block, enc_block, 2U);
-
- if (memcmp(dec_block, src_block, tmp->blocksize >> 2))
- {
- printf("failed\n");
- /*@innercontinue@*/ continue;
- }
- printf("ok\n");
- printf(" speed measurement:\n");
- {
- #if HAVE_TIME_H
- double ttime;
- clock_t tstart, tstop;
- #endif
-
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- (void) blockEncryptECB(tmp, encrypt_param, spd_block, spd_block, 1024U * 1024U);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" ECB encrypts 1M blocks of %u bits in %.3f seconds (%.3f MB/s)\n", tmp->blocksize << 3, ttime, (tmp->blocksize) / ttime);
- #endif
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- (void) blockDecryptECB(tmp, decrypt_param, spd_block, spd_block, 1024U * 1024U);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" ECB decrypts 1M blocks of %u bits in %.3f seconds (%.3f MB/s)\n", tmp->blocksize << 3, ttime, (tmp->blocksize) / ttime);
- #endif
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- (void) blockEncryptCBC(tmp, encrypt_param, spd_block, spd_block, 1024U * 1024U);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" CBC encrypts 1M blocks of %u bits in %.3f seconds (%.3f MB/s)\n", tmp->blocksize << 3, ttime, (tmp->blocksize) / ttime);
- #endif
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- (void) blockDecryptCBC(tmp, decrypt_param, spd_block, spd_block, 1024U * 1024U);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" CBC decrypts 1M blocks of %u bits in %.3f seconds (%.3f MB/s)\n", tmp->blocksize << 3, ttime, (tmp->blocksize) / ttime);
- #endif
- }
- }
- free(spd_block);
- free(dec_block);
- free(enc_block);
- free(src_block);
- free(decrypt_param);
- free(encrypt_param);
- }
- }
-}
-
-static void testHashFunctions(void)
- /*@globals fileSystem, internalState @*/
- /*@modifies fileSystem, internalState @*/
-{
- int i, j;
-
- uint8_t* data = (uint8_t*) malloc(32 * 1024 * 1024);
-
- if (data)
- {
- hashFunctionContext hfc;
-
- printf("Timing the hash functions:\n");
-
- for (i = 0; i < hashFunctionCount(); i++)
- {
- const hashFunction* tmp = hashFunctionGet(i);
-
-/*@-branchstate@*/
- if (tmp)
- {
- #if HAVE_TIME_H
- double ttime;
- clock_t tstart, tstop;
- #endif
- mpnumber digest;
-
- mpnzero(&digest);
-
- printf(" %s:\n", tmp->name);
-
- /*@-modobserver -usedef @*/
- if (hashFunctionContextInit(&hfc, tmp) == 0)
- /*@=modobserver =usedef @*/
- {
- for (j = 0; j < 4; j++)
- {
- #if HAVE_TIME_H
- tstart = clock();
- #endif
-
- (void) hashFunctionContextUpdate(&hfc, data, 32 * 1024 * 1024);
- (void) hashFunctionContextDigestMP(&hfc, &digest);
-
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" hashes 32 MB in %.3f seconds (%.3f MB/s)\n", ttime, 32.0 / ttime);
- #endif
- }
-
- /*@-modobserver -usedef @*/
- (void) hashFunctionContextFree(&hfc);
- /*@=modobserver =usedef @*/
- }
-
- mpnfree(&digest);
- }
-/*@=branchstate@*/
- }
- free(data);
- }
-}
-
-static void testExpMods(void)
- /*@globals fileSystem, internalState @*/
- /*@modifies fileSystem, internalState @*/
-{
- /*@unchecked@*/ /*@observer@*/
- static const char* p_512 = "ffcf0a0767f18f9b659d92b9550351430737c3633dc6ae7d52445d937d8336e07a7ccdb119e9ab3e011a8f938151230e91187f84ac05c3220f335193fc5e351b";
-
- /*@unchecked@*/ /*@observer@*/
- static const char* p_768 = "f9c3dc0b8e199094e3e69386e01de863908348196d6ad2557065e6ba36d10412579f394d1114c954ee647c84551d52f214e1e1682a75e7074b91085cfaf20b2888aa056bf760948a0b678bc253633eccfca86556ddb90f000ef93041b0d53171";
-
- /*@unchecked@*/ /*@observer@*/
- static const char* p_1024 = "c615c47a56b47d869010256171ab164525f2ef4b887a4e0cdfc87043a9dd8894f2a18fa56729448e700f4b7420470b61257d11ecefa9ff518dc9fed5537ec6a9665ba73c948674320ff61b29c4cfa61e5baf47dfc1b80939e1bffb51787cc3252c4d1190a7f13d1b0f8d4aa986571ce5d4de5ecede1405e9bc0b5bf040a46d99";
-
- randomGeneratorContext rngc;
-
- mpbarrett p;
- mpnumber tmp;
- mpnumber g;
- mpnumber x;
- mpnumber y;
-
- mpbzero(&p);
- mpnzero(&g);
- mpnzero(&x);
- mpnzero(&y);
- mpnzero(&tmp);
-
-/*@-branchstate@*/
- /*@-modobserver -usedef @*/
- if (randomGeneratorContextInit(&rngc, randomGeneratorDefault()) == 0)
- /*@=modobserver =usedef @*/
- {
- int i;
- #if HAVE_TIME_H
- double ttime;
- clock_t tstart, tstop;
- #endif
-
- printf("Timing modular exponentiations:\n");
- printf(" (512 bits ^ 512 bits) mod 512 bits:");
- mpnsethex(&tmp, p_512);
- mpbset(&p, tmp.size, tmp.data);
- mpnsize(&g, p.size);
- mpnsize(&x, p.size);
- mpbnrnd(&p, &rngc, &g);
- mpbnrnd(&p, &rngc, &x);
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- for (i = 0; i < 100; i++)
- mpbnpowmod(&p, &g, &x, &y);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" 100x in %.3f seconds\n", ttime);
- #endif
- printf(" (768 bits ^ 768 bits) mod 768 bits:");
- mpnsethex(&tmp, p_768);
- mpbset(&p, tmp.size, tmp.data);
- mpnsize(&g, p.size);
- mpnsize(&x, p.size);
- mpbnrnd(&p, &rngc, &g);
- mpbnrnd(&p, &rngc, &x);
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- for (i = 0; i < 100; i++)
- mpbnpowmod(&p, &g, &x, &y);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" 100x in %.3f seconds\n", ttime);
- #endif
- printf(" (1024 bits ^ 1024 bits) mod 1024 bits:");
- mpnsethex(&tmp, p_1024);
- mpbset(&p, tmp.size, tmp.data);
- mpnsize(&g, p.size);
- mpnsize(&x, p.size);
- mpbnrnd(&p, &rngc, &g);
- mpbnrnd(&p, &rngc, &x);
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- for (i = 0; i < 100; i++)
- mpbnpowmod(&p, &g, &x, &y);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" 100x in %.3f seconds\n", ttime);
- #endif
- /* now run a test with x having 160 bits */
- mpnsize(&x, 5);
-/*@-noeffectuncon@*/
- (void) rngc.rng->next(rngc.param, x.data, x.size);
-/*@=noeffectuncon@*/
- printf(" (1024 bits ^ 160 bits) mod 1024 bits:");
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- for (i = 0; i < 100; i++)
- mpbnpowmod(&p, &g, &x, &y);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" 100x in %.3f seconds\n", ttime);
- #endif
- mpbfree(&p);
- mpnfree(&g);
- mpnfree(&x);
- mpnfree(&y);
- mpnfree(&tmp);
-
- /*@-modobserver -usedef @*/
- (void) randomGeneratorContextFree(&rngc);
- /*@=modobserver =usedef @*/
- }
- else
- printf("random generator setup problem\n");
-/*@=branchstate@*/
-}
-
-static void testRSA(void)
- /*@globals fileSystem, internalState @*/
- /*@modifies fileSystem, internalState @*/
-{
- randomGeneratorContext rngc;
- mpnumber hm, s;
- rsakp kp;
- int xx;
-
- mpnzero(&hm);
- mpnzero(&s);
-
- printf("Timing RSA:\n");
-
- (void) rsakpInit(&kp);
-
-/*@-branchstate@*/
- /*@-modobserver -usedef @*/
- if (randomGeneratorContextInit(&rngc, randomGeneratorDefault()) == 0)
- /*@=modobserver =usedef @*/
- {
- int i;
-
- #if HAVE_TIME_H
- double ttime;
- clock_t tstart, tstop;
- #endif
-
- printf(" generating 1024 bit crt keypair\n");
-
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- (void) rsakpMake(&kp, &rngc, (1024 >> 5));
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" done in %.3f seconds\n", ttime);
- #endif
-
- mpnsize(&hm, 4);
-/*@-noeffectuncon@*/
- (void) rngc.rng->next(rngc.param, hm.data, hm.size);
-/*@=noeffectuncon@*/
-
- printf(" RSA sign:");
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- for (i = 0; i < 100; i++)
- {
- xx = rsapricrt(&kp, &hm, &s);
- }
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" 100x in %.3f seconds\n", ttime);
- #endif
-
- printf(" RSA verify:");
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- for (i = 0; i < 1000; i++)
- {
- xx = rsavrfy((rsapk*) &kp, &hm, &s);
- }
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" 1000x in %.3f seconds\n", ttime);
- #endif
-
- (void) rsakpFree(&kp);
-
- /*@-modobserver -usedef @*/
- (void) randomGeneratorContextFree(&rngc);
- /*@=modobserver =usedef @*/
- }
-/*@=branchstate@*/
-}
-
-static void testDLAlgorithms(void)
- /*@globals fileSystem, internalState @*/
- /*@modifies fileSystem, internalState @*/
-{
- randomGeneratorContext rngc;
- mpnumber hm, r, s;
- dldp_p dp;
- dlkp_p kp;
- int xx;
-
- mpnzero(&hm);
- mpnzero(&r);
- mpnzero(&s);
-
- (void) dldp_pInit(&dp);
- (void) dlkp_pInit(&kp);
-
- printf("Timing Discrete Logarithm algorithms:\n");
-
-/*@-branchstate@*/
- /*@-modobserver -usedef @*/
- if (randomGeneratorContextInit(&rngc, randomGeneratorDefault()) == 0)
- /*@=modobserver =usedef @*/
- {
- int i;
-
- #if HAVE_TIME_H
- double ttime;
- clock_t tstart, tstop;
- #endif
- printf(" generating P (1024 bits) Q (160 bits) G with order Q\n");
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- (void) dldp_pgoqMake(&dp, &rngc, 1024 >> 5, 160 >> 5, 1);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" done in %.3f seconds\n", ttime);
- #endif
-
- (void) dlkp_pInit(&kp);
- printf(" generating keypair\n");
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- (void) dlkp_pPair(&kp, &rngc, &dp);
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" done in %.3f seconds\n", ttime);
- #endif
-
- mpnsize(&hm, 5);
-/*@-noeffectuncon@*/
- (void) rngc.rng->next(rngc.param, hm.data, hm.size);
-/*@=noeffectuncon@*/
-
- printf(" DSA sign:");
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- for (i = 0; i < 100; i++)
- {
- xx = dsasign(&kp.param.p, &kp.param.q, &kp.param.g, &rngc, &hm, &kp.x, &r, &s);
- }
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" 100x in %.3f seconds\n", ttime);
- #endif
-
- printf(" DSA verify:");
- #if HAVE_TIME_H
- tstart = clock();
- #endif
- for (i = 0; i < 100; i++)
- {
- xx = dsavrfy(&kp.param.p, &kp.param.q, &kp.param.g, &hm, &kp.y, &r, &s);
- }
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" 100x in %.3f seconds\n", ttime);
- #endif
- (void) dlkp_pFree(&kp);
-/*@-usedef@*/
- (void) dldp_pFree(&dp);
-/*@=usedef@*/
-
- printf(" generating P (1024 bits) Q (768 bits) G with order (P-1)\n");
- #if HAVE_TIME_H
- tstart = clock();
- #endif
-/*@-usereleased@*/
- (void) dldp_pgonMake(&dp, &rngc, 1024 >> 5, 768 >> 5);
-/*@=usereleased@*/
- #if HAVE_TIME_H
- tstop = clock();
- ttime = ((double)(tstop - tstart)) / CLOCKS_PER_SEC;
- printf(" done in %.3f seconds\n", ttime);
- #endif
-/*@-usedef@*/
- (void) dldp_pFree(&dp);
-/*@=usedef@*/
-
- /*@-modobserver -usedef @*/
- (void) randomGeneratorContextFree(&rngc);
- /*@=modobserver =usedef @*/
- }
-/*@=branchstate@*/
-}
-
-int main(/*@unused@*/ int argc, /*@unused@*/ char *argv[])
- /*@globals fileSystem, internalState @*/
- /*@modifies fileSystem, internalState @*/
-{
- unsigned int j;
- int i;
-
- printf("the beecrypt library implements:\n");
- printf(" %d entropy source%s:\n", entropySourceCount(), entropySourceCount() == 1 ? "" : "s");
- for (i = 0; i < entropySourceCount(); i++)
- {
- const entropySource* tmp = entropySourceGet(i);
- if (tmp)
- printf(" %s\n", tmp->name);
- else
- printf("*** error: library corrupt\n");
- }
- printf(" %d random generator%s:\n", randomGeneratorCount(), randomGeneratorCount() == 1 ? "" : "s");
- for (i = 0; i < randomGeneratorCount(); i++)
- {
- const randomGenerator* tmp = randomGeneratorGet(i);
- if (tmp)
- printf(" %s\n", tmp->name);
- else
- printf("*** error: library corrupt\n");
- }
- printf(" %d hash function%s:\n", hashFunctionCount(), hashFunctionCount() == 1 ? "" : "s");
- for (i = 0; i < hashFunctionCount(); i++)
- {
- const hashFunction* tmp = hashFunctionGet(i);
- if (tmp)
- printf(" %s\n", tmp->name);
- else
- printf("*** error: library corrupt\n");
- }
- printf(" %d keyed hash function%s:\n", keyedHashFunctionCount(), keyedHashFunctionCount() == 1 ? "" : "s");
- for (i = 0; i < keyedHashFunctionCount(); i++)
- {
- const keyedHashFunction* tmp = keyedHashFunctionGet(i);
- if (tmp)
- printf(" %s\n", tmp->name);
- else
- printf("*** error: library corrupt\n");
- }
- printf(" %d blockcipher%s:\n", blockCipherCount(), blockCipherCount() == 1 ? "" : "s");
- for (i = 0; i < blockCipherCount(); i++)
- {
- const blockCipher* tmp = blockCipherGet(i);
- if (tmp)
- {
- printf(" %s ", tmp->name);
- for (j = tmp->keybitsmin; j <= tmp->keybitsmax; j += tmp->keybitsinc)
- {
- printf("%u", j);
- if (j < tmp->keybitsmax)
- printf("/");
- else
- printf(" bit keys\n");
- }
- }
- else
- printf("*** error: library corrupt\n");
- }
- testBlockCiphers();
- testHashFunctions();
- testExpMods();
- testRSA();
- testDLAlgorithms();
-
- printf("done\n");
-
- return 0;
-}
-/*@=compdef@*/
* \author Bob Deblier <bob.deblier@pandora.be>
*/
-#include "system.h"
#include "beecrypt.h"
#include "timestamp.h"
-#include "debug.h"
+
+#include <stdio.h>
#define SECONDS 10
* \author Bob Deblier <bob.deblier@pandora.be>
*/
-#include "system.h"
#include "beecrypt.h"
#include "timestamp.h"
-#include "debug.h"
+
+#include <stdio.h>
#define SECONDS 10
* \author Bob Deblier <bob.deblier@pandora.be>
*/
-#include "system.h"
#include "beecrypt.h"
#include "dldp.h"
#include "timestamp.h"
-#include "debug.h"
+
+#include <stdio.h>
#define SECONDS 10
+++ /dev/null
-/**
- * \file tests/openpgp.c
- */
-
-static int _debug = 0;
-
-#include "system.h"
-#include "base64.h"
-#include "debug.h"
-
-static inline int grab(const byte *s, int nbytes)
-{
- int i = 0;
- int nb = (nbytes <= sizeof(i) ? nbytes : sizeof(i));
- while (nb--)
- i = (i << 8) | *s++;
- return i;
-}
-
-#define GRAB(_a) grab((_a), sizeof(_a))
-
-typedef struct {
- byte nbits[2];
- byte bits[1];
-} MPI_t;
-
-static inline int mpi_nbits(const byte *p) { return ((p[0] << 8) | p[1]); }
-static inline int mpi_len(const byte *p) { return (2 + ((mpi_nbits(p)+7)>>3)); }
-
-static char * pr_pfmt(char *t, const byte *s, int nbytes)
-{
- static char hex[] = "0123456789abcdef";
- while (nbytes-- > 0) {
- *t++ = hex[ (*s >> 4) & 0xf ];
- *t++ = hex[ (*s++ ) & 0xf ];
- }
- *t = '\0';
- return t;
-}
-
-static char prbuf[2048];
-
-static char * pr_hex(const byte *p, unsigned plen)
-{
- char *t = prbuf;
-
- t = pr_pfmt(t, p, plen);
- return prbuf;
-}
-
-static const char * pr_mpi(const byte *p)
-{
- char *t = prbuf;
-
- sprintf(t, "[%d]: ", grab(p,2));
- t += strlen(t);
- t = pr_pfmt(t, p+2, mpi_len(p)-2);
- return prbuf;
-}
-
-static const char * pr_sigtype(byte sigtype) {
- switch (sigtype) {
- case 0x00: return("Signature of a binary document"); break;
- case 0x01: return("Signature of a canonical text document"); break;
- case 0x02: return("Standalone signature"); break;
- case 0x10: return("Generic certification of a User ID and Public Key"); break;
- case 0x11: return("Persona certification of a User ID and Public Key"); break;
- case 0x12: return("Casual certification of a User ID and Public Key"); break;
- case 0x13: return("Positive certification of a User ID and Public Key"); break;
- case 0x18: return("Subkey Binding Signature"); break;
- case 0x1F: return("Signature directly on a key"); break;
- case 0x20: return("Key revocation signature"); break;
- case 0x28: return("Subkey revocation signature"); break;
- case 0x30: return("Certification revocation signature"); break;
- case 0x40: return("Timestamp signature"); break;
- }
- return "Unknown signature type";
-}
-
-static const char * pr_pubkey_algo(byte pubkey_algo) {
- switch (pubkey_algo) {
- case 1: return("RSA"); break;
- case 2: return("RSA(Encrypt-Only)"); break;
- case 3 : return("RSA(Sign-Only)"); break;
- case 16: return("Elgamal(Encrypt-Only)"); break;
- case 17: return("DSA"); break;
- case 18: return("Elliptic Curve"); break;
- case 19: return("ECDSA"); break;
- case 20: return("Elgamal"); break;
- case 21: return("Diffie-Hellman (X9.42)"); break;
- }
- return "Unknown public key algorithm";
-}
-
-static const char * pr_symkey_algo(byte symkey_algo) {
- switch (symkey_algo) {
- case 0: return("Plaintext"); break;
- case 1: return("IDEA"); break;
- case 2: return("DES-EDE"); break;
- case 3: return("CAST5"); break;
- case 4: return("BLOWFISH"); break;
- case 5: return("SAFER"); break;
- case 10: return("TWOFISH"); break;
- }
- return "Unknown symmetric key algorithm";
-};
-
-static const char * pr_compression_algo(byte compression_algo) {
- switch (compression_algo) {
- case 0: return("Uncompressed"); break;
- case 1: return("ZIP"); break;
- case 2: return("ZLIB"); break;
- }
- return "Unknown compression algorithm";
-};
-
-static const char * pr_hash_algo(byte hash_algo) {
- switch (hash_algo) {
- case 1: return("MD5"); break;
- case 2: return("SHA1"); break;
- case 3: return("RIPEMD160"); break;
- case 5: return("MD2"); break;
- case 6: return("TIGER192"); break;
- case 7: return("HAVAL-5-160"); break;
- }
- return "Unknown hash algorithm";
-}
-
-static const char * pr_keyserv_pref (byte keyserv_pref) {
- switch(keyserv_pref) {
- case 0x80: return("No-modify"); break;
- }
- return "Unknown key server preference";
-};
-
-static const char * pr_sigsubkeytype (byte sigsubkeytype) {
- switch(sigsubkeytype) {
- case 2: return("signature creation time"); break;
- case 3: return("signature expiration time"); break;
- case 4: return("exportable certification"); break;
- case 5: return("trust signature"); break;
- case 6: return("regular expression"); break;
- case 7: return("revocable"); break;
- case 9: return("key expiration time"); break;
- case 10: return("placeholder for backward compatibility"); break;
- case 11: return("preferred symmetric algorithms"); break;
- case 12: return("revocation key"); break;
- case 16: return("issuer key ID"); break;
- case 20: return("notation data"); break;
- case 21: return("preferred hash algorithms"); break;
- case 22: return("preferred compression algorithms"); break;
- case 23: return("key server preferences"); break;
- case 24: return("preferred key server"); break;
- case 25: return("primary user id"); break;
- case 26: return("policy URL"); break;
- case 27: return("key flags"); break;
- case 28: return("signer's user id"); break;
- case 29: return("reason for revocation"); break;
- }
- return "Unknown signature subkey type";
-}
-
-const char *ptags[] = {
- "Reserved - a packet tag must not have this value",
- "Public-Key Encrypted Session Key",
- "Signature",
- "Symmetric-Key Encrypted Session Key",
- "One-Pass Signature",
- "Secret Key",
- "Public Key",
- "Secret Subkey",
- "Compressed Data",
- "Symmetrically Encrypted Data",
- "Marker",
- "Literal Data",
- "Trust",
- "User ID",
- "Public Subkey",
- "??? TAG15 ???",
-};
-
-typedef enum {
- RPMKEYPKT_SIGNATURE = 2,
- RPMKEYPKT_SECRET_KEY = 5,
- RPMKEYPKT_PUBLIC_KEY = 6,
- RPMKEYPKT_SECRET_SUBKEY = 7,
- RPMKEYPKT_USER_ID = 13,
- RPMKEYPKT_PUBLIC_SUBKEY = 14
-} rpmKeyPkt;
-
-/*
-5.2.2. Version 3 Signature Packet Format
- The body of a version 3 Signature Packet contains:
- - One-octet version number (3).
- - One-octet length of following hashed material. MUST be 5.
- - One-octet signature type.
- - Four-octet creation time.
- - Eight-octet key ID of signer.
- - One-octet public key algorithm.
- - One-octet hash algorithm.
- - Two-octet field holding left 16 bits of signed hash value.
- - One or more multi-precision integers comprising the signature.
- This portion is algorithm specific, as described below.
-*/
-
-struct signature_v3 {
- byte version; /*!< version number (3). */
- byte hashlen; /*!< length of following hashed material. MUST be 5. */
- byte sigtype; /*!< signature type. */
- byte time[4]; /*!< 4 byte creation time. */
- byte signer[8]; /*!< key ID of signer. */
- byte pubkey_algo; /*!< public key algorithm. */
- byte hash_algo; /*!< hash algorithm. */
- byte signhash16[2]; /*!< left 16 bits of signed hash value. */
- byte data[1]; /*!< One or more multi-precision integers. */
-};
-
-static int pr_signature_v3(rpmKeyPkt ptag, const byte *h, unsigned hlen)
-{
- struct signature_v3 *v = (struct signature_v3 *)h;
- byte *p;
- unsigned plen;
- int i;
-
-fprintf(stderr, "%s(%d)", ptags[ptag], ptag);
- if (v->version != 3) {
- fprintf(stderr, " version(%d) != 3\n", v->version);
- return 1;
- }
- if (v->hashlen != 5) {
- fprintf(stderr, " hashlen(%d) != 5\n", v->hashlen);
- return 1;
- }
-fprintf(stderr, " %s(%d)", pr_pubkey_algo(v->pubkey_algo), v->pubkey_algo);
-fprintf(stderr, " %s(%d)", pr_hash_algo(v->hash_algo), v->hash_algo);
-
-fprintf(stderr, " %s(%d)", pr_sigtype(v->sigtype), v->sigtype);
-
- plen = GRAB(v->time);
-fprintf(stderr, " time %08x", plen);
-fprintf(stderr, " signer keyid %02x%02x%02x%02x%02x%02x%02x%02x",
- v->signer[0], v->signer[1], v->signer[2], v->signer[3],
- v->signer[4], v->signer[5], v->signer[6], v->signer[7]);
- plen = GRAB(v->signhash16);
-fprintf(stderr, " signhash16 %04x", plen);
-fprintf(stderr, "\n");
-
- p = &v->data[0];
- for (i = 0; p < &h[hlen]; i++, p += mpi_len(p))
- fprintf(stderr, "%7d %s\n", i, pr_mpi(p));
-
- return 0;
-}
-
-/*
-5.2.3.1. Signature Subpacket Specification
-
- The subpacket fields consist of zero or more signature subpackets.
- Each set of subpackets is preceded by a two-octet scalar count of the
- length of the set of subpackets.
-
- Each subpacket consists of a subpacket header and a body. The header
- consists of:
-
- - the subpacket length (1, 2, or 5 octets)
-
- - the subpacket type (1 octet)
-
- and is followed by the subpacket specific data.
-
- The length includes the type octet but not this length. Its format is
- similar to the "new" format packet header lengths, but cannot have
- partial body lengths. That is:
-
- if the 1st octet < 192, then
- lengthOfLength = 1
- subpacketLen = 1st_octet
-
- if the 1st octet >= 192 and < 255, then
- lengthOfLength = 2
- subpacketLen = ((1st_octet - 192) << 8) + (2nd_octet) + 192
-
- if the 1st octet = 255, then
- lengthOfLength = 5
- subpacket length = [four-octet scalar starting at 2nd_octet]
-
-*/
-
-static int pr_sigsubkeys(const byte *h, unsigned hlen)
-{
- const byte *p = h;
- unsigned plen;
- int i;
-
- while (hlen > 0) {
- if (*p < 192) {
- plen = *p++;
- hlen -= 1;
- } else if (*p < 255) {
- plen = ((p[0] - 192) << 8) + p[1] + 192;
- p += 2;
- hlen -= 2;
- } else {
- p++;
- plen = grab(p, 4);
- p += 4;
- hlen -= 5;
- }
-fprintf(stderr, " %s(%d)", pr_sigsubkeytype(*p), *p);
- switch (*p) {
- case 11: /* preferred symmetric algorithms */
- for (i = 1; i < plen; i++)
- fprintf(stderr, " %s(%d)", pr_symkey_algo(p[i]), p[i]);
- fprintf(stderr, "\n");
- break;
- case 21: /* preferred hash algorithms */
- for (i = 1; i < plen; i++)
- fprintf(stderr, " %s(%d)", pr_hash_algo(p[i]), p[i]);
- fprintf(stderr, "\n");
- break;
- case 22: /* preferred compression algorithms */
- for (i = 1; i < plen; i++)
- fprintf(stderr, " %s(%d)", pr_compression_algo(p[i]), p[i]);
- fprintf(stderr, "\n");
- break;
- case 23: /* key server preferences */
- for (i = 1; i < plen; i++)
- fprintf(stderr, " %s(%d)", pr_keyserv_pref(p[i]), p[i]);
- fprintf(stderr, "\n");
- break;
- case 16: /* issuer key ID */
- default:
- fprintf(stderr, " %s", pr_hex(p+1, plen-1));
- fprintf(stderr, "\n");
- break;
- }
- p += plen;
- hlen -= plen;
- }
- return 0;
-}
-
-/*
-5.2.3. Version 4 Signature Packet Format
- The body of a version 4 Signature Packet contains:
- - One-octet version number (4).
- - One-octet signature type.
- - One-octet public key algorithm.
- - One-octet hash algorithm.
- - Two-octet scalar octet count for following hashed subpacket
- data. Note that this is the length in octets of all of the hashed
- subpackets; a pointer incremented by this number will skip over
- the hashed subpackets.
- - Hashed subpacket data. (zero or more subpackets)
- - Two-octet scalar octet count for following unhashed subpacket
- data. Note that this is the length in octets of all of the
- unhashed subpackets; a pointer incremented by this number will
- skip over the unhashed subpackets.
- - Unhashed subpacket data. (zero or more subpackets)
- - Two-octet field holding left 16 bits of signed hash value.
- - One or more multi-precision integers comprising the signature.
- This portion is algorithm specific, as described above.
-*/
-
-struct signature_v4 {
- byte version; /*!< version number (4). */
- byte sigtype; /*!< signature type. */
- byte pubkey_algo; /*!< public key algorithm. */
- byte hash_algo; /*!< hash algorithm. */
- byte hashlen[2]; /*!< length of following hashed material. */
- byte data[1]; /*!< Hashed subpacket data. (zero or more subpackets) */
-};
-
-static int pr_signature_v4(rpmKeyPkt ptag, const byte *h, unsigned hlen)
-{
- struct signature_v4 *v = (struct signature_v4 *)h;
- byte * p;
- unsigned plen;
- int i;
-
-fprintf(stderr, "%s(%d)", ptags[ptag], ptag);
- if (v->version != 4) {
- fprintf(stderr, " version(%d) != 4\n", v->version);
- return 1;
- }
-fprintf(stderr, " %s(%d)", pr_pubkey_algo(v->pubkey_algo), v->pubkey_algo);
-fprintf(stderr, " %s(%d)", pr_hash_algo(v->hash_algo), v->hash_algo);
-
-fprintf(stderr, " %s(%d)", pr_sigtype(v->sigtype), v->sigtype);
-fprintf(stderr, "\n");
-
- p = &v->hashlen[0];
- plen = GRAB(v->hashlen);
- p += 2;
-fprintf(stderr, " hash[%d] -- %s\n", plen, pr_hex(p, plen));
- pr_sigsubkeys(p, plen);
- p += plen;
- plen = grab(p,2);
- p += 2;
-fprintf(stderr, " unhash[%d] -- %s\n", plen, pr_hex(p, plen));
- pr_sigsubkeys(p, plen);
- p += plen;
- plen = grab(p,2);
- p += 2;
-fprintf(stderr, " signhash16 %04x\n", plen);
-
- for (i = 0; p < &h[hlen]; i++, p += mpi_len(p))
- fprintf(stderr, "%7d %s\n", i, pr_mpi(p));
-
- return 0;
-}
-
-static int pr_signature(rpmKeyPkt ptag, const byte *h, unsigned hlen)
-{
- byte version = *h;
- switch (version) {
- case 3:
- pr_signature_v3(ptag, h, hlen);
- break;
- case 4:
- pr_signature_v4(ptag, h, hlen);
- break;
- }
- return 0;
-}
-
-/*
- A version 3 public key or public subkey packet contains:
- - A one-octet version number (3).
- - A four-octet number denoting the time that the key was created.
- - A two-octet number denoting the time in days that this key is
- valid. If this number is zero, then it does not expire.
- - A one-octet number denoting the public key algorithm of this key
- - A series of multi-precision integers comprising the key
- material:
- - MPI of RSA public modulus n;
- - MPI of RSA public encryption exponent e.
-
- Algorithm Specific Fields for RSA signatures:
- - multiprecision integer (MPI) of RSA signature value m**d.
-
- Algorithm Specific Fields for DSA signatures:
- - MPI of DSA value r.
- - MPI of DSA value s.
-
-*/
-
-struct key_v3 {
- byte version; /*!< version number (3). */
- byte time[4]; /*!< time that the key was created. */
- byte valid[2]; /*!< time in days that this key is valid. */
- byte pubkey_algo; /*!< public key algorithm. */
- byte data[1]; /*!< One or more multi-precision integers. */
-};
-
-static int pr_key_v3(rpmKeyPkt ptag, const byte *h, unsigned hlen)
-{
- struct key_v3 *v = (struct key_v3 *)h;
- byte * p;
- unsigned plen;
- int i;
-
-fprintf(stderr, "%s(%d)", ptags[ptag], ptag);
- if (v->version != 3) {
- fprintf(stderr, " version(%d) != 3\n", v->version);
- return 1;
- }
- plen = GRAB(v->time);
-fprintf(stderr, " time %08x", plen);
-fprintf(stderr, " %s(%d)", pr_pubkey_algo(v->pubkey_algo), v->pubkey_algo);
-
- plen = GRAB(v->valid);
- if (plen != 0)
- fprintf(stderr, " valid %d days", plen);
-
-fprintf(stderr, "\n");
-
- p = &v->data[0];
- for (i = 0; p < &h[hlen]; i++, p += mpi_len(p))
- fprintf(stderr, "%7d %s\n", i, pr_mpi(p));
-
- return 0;
-}
-
-/*
- A version 4 packet contains:
- - A one-octet version number (4).
- - A four-octet number denoting the time that the key was created.
- - A one-octet number denoting the public key algorithm of this key
- - A series of multi-precision integers comprising the key
- material. This algorithm-specific portion is:
-
- Algorithm Specific Fields for RSA public keys:
- - MPI of RSA public modulus n;
- - MPI of RSA public encryption exponent e.
-
- Algorithm Specific Fields for DSA public keys:
- - MPI of DSA prime p;
- - MPI of DSA group order q (q is a prime divisor of p-1);
- - MPI of DSA group generator g;
- - MPI of DSA public key value y (= g**x where x is secret).
-
- Algorithm Specific Fields for Elgamal public keys:
- - MPI of Elgamal prime p;
- - MPI of Elgamal group generator g;
- - MPI of Elgamal public key value y (= g**x where x is
- secret).
-*/
-
-struct key_v4 {
- byte version; /*!< version number (4). */
- byte time[4]; /*!< time that the key was created. */
- byte pubkey_algo; /*!< public key algorithm. */
- byte data[1]; /*!< One or more multi-precision integers. */
-};
-
-static int pr_key_v4(rpmKeyPkt ptag, const byte *h, unsigned hlen)
-{
- struct key_v4 *v = (struct key_v4 *)h;
- byte * p;
- unsigned plen;
- int i;
-
-fprintf(stderr, "%s(%d)", ptags[ptag], ptag);
- if (v->version != 4) {
- fprintf(stderr, " version(%d) != 4\n", v->version);
- return 1;
- }
- plen = GRAB(v->time);
-fprintf(stderr, " time %08x", plen);
-fprintf(stderr, " %s(%d)", pr_pubkey_algo(v->pubkey_algo), v->pubkey_algo);
-fprintf(stderr, "\n");
-
- p = &v->data[0];
- for (i = 0; p < &h[hlen]; i++, p += mpi_len(p))
- fprintf(stderr, "%7d %s\n", i, pr_mpi(p));
-
- return 0;
-}
-
-static int pr_key(rpmKeyPkt ptag, const byte *h, unsigned hlen)
-{
- byte version = *h;
- switch (version) {
- case 3:
- pr_key_v3(ptag, h, hlen);
- break;
- case 4:
- pr_key_v4(ptag, h, hlen);
- break;
- }
- return 0;
-}
-
-/*
-5.11. User ID Packet (Tag 13)
-
- A User ID packet consists of data that is intended to represent the
- name and email address of the key holder. By convention, it includes
- an RFC 822 mail name, but there are no restrictions on its content.
- The packet length in the header specifies the length of the user id.
- If it is text, it is encoded in UTF-8.
-*/
-
-static int pr_user_id(rpmKeyPkt ptag, const byte *h, unsigned hlen)
-{
-fprintf(stderr, "%s(%d)", ptags[ptag], ptag);
-fprintf(stderr, " \"%*s\"\n", hlen, h);
- return 0;
-}
-
-static int pr_keypkt(const byte *p)
-{
- unsigned int val = *p;
- unsigned int mark = (val >> 7) & 0x1;
- unsigned int new = (val >> 6) & 0x1;
- rpmKeyPkt ptag = (val >> 2) & 0xf;
- unsigned int plen = (1 << (val & 0x3));
- const byte *h;
- unsigned int hlen = 0;
- unsigned int i;
-
- /* XXX can't deal with these. */
- if (!mark || new || plen > 8)
- return -1;
-
- for (i = 1; i <= plen; i++)
- hlen = (hlen << 8) | p[i];
-
- h = p + plen + 1;
- switch (ptag) {
- case RPMKEYPKT_SIGNATURE:
- pr_signature(ptag, h, hlen);
- break;
- case RPMKEYPKT_PUBLIC_KEY:
- case RPMKEYPKT_PUBLIC_SUBKEY:
- case RPMKEYPKT_SECRET_KEY:
- case RPMKEYPKT_SECRET_SUBKEY:
- pr_key(ptag, h, hlen);
- break;
- case RPMKEYPKT_USER_ID:
- pr_user_id(ptag, h, hlen);
- break;
- default:
- fprintf(stderr, "%s(%d) plen %02x hlen %x\n",
- ptags[ptag], ptag, plen, hlen);
- break;
- }
-
- return plen+hlen+1;
-}
-
-/* This is the unarmored RPM-GPG-KEY public key. */
-const char * gpgsig = "\
-mQGiBDfqVDgRBADBKr3Bl6PO8BQ0H8sJoD6p9U7Yyl7pjtZqioviPwXP+DCWd4u8\n\
-HQzcxAZ57m8ssA1LK1Fx93coJhDzM130+p5BG9mYSWShLabR3N1KXdXQYYcowTOM\n\
-GxdwYRGr1Spw8QydLhjVfU1VSl4xt6bupPbWJbyjkg5Z3P7BlUOUJmrx3wCgobNV\n\
-EDGaWYJcch5z5B1of/41G8kEAKii6q7Gu/vhXXnLS6m15oNnPVybyngiw/23dKjS\n\
-ZVG7rKANEK2mxg1VB+vc/uUc4k49UxJJfCZg1gu1sPFV3GSa+Y/7jsiLktQvCiLP\n\
-lncQt1dV+ENmHR5BdIDPWDzKBVbgWnSDnqQ6KrZ7T6AlZ74VMpjGxxkWU6vV2xsW\n\
-XCLPA/9P/vtImA8CZN3jxGgtK5GGtDNJ/cMhhuv5tnfwFg4b/VGo2Jr8mhLUqoIb\n\
-E6zeGAmZbUpdckDco8D5fiFmqTf5+++pCEpJLJkkzel/32N2w4qzPrcRMCiBURES\n\
-PjCLd4Y5rPoU8E4kOHc/4BuHN903tiCsCPloCrWsQZ7UdxfQ5LQiUmVkIEhhdCwg\n\
-SW5jIDxzZWN1cml0eUByZWRoYXQuY29tPohVBBMRAgAVBQI36lQ4AwsKAwMVAwID\n\
-FgIBAheAAAoJECGRgM3bQqYOsBQAnRVtg7B25Hm11PHcpa8FpeddKiq2AJ9aO8sB\n\
-XmLDmPOEFI75mpTrKYHF6rkCDQQ36lRyEAgAokgI2xJ+3bZsk8jRA8ORIX8DH05U\n\
-lMH27qFYzLbT6npXwXYIOtVn0K2/iMDj+oEB1Aa2au4OnddYaLWp06v3d+XyS0t+\n\
-5ab2ZfIQzdh7wCwxqRkzR+/H5TLYbMG+hvtTdylfqIX0WEfoOXMtWEGSVwyUsnM3\n\
-Jy3LOi48rQQSCKtCAUdV20FoIGWhwnb/gHU1BnmES6UdQujFBE6EANqPhp0coYoI\n\
-hHJ2oIO8ujQItvvNaU88j/s/izQv5e7MXOgVSjKe/WX3s2JtB/tW7utpy12wh1J+\n\
-JsFdbLV/t8CozUTpJgx5mVA3RKlxjTA+On+1IEUWioB+iVfT7Ov/0kcAzwADBQf9\n\
-E4SKCWRand8K0XloMYgmipxMhJNnWDMLkokvbMNTUoNpSfRoQJ9EheXDxwMpTPwK\n\
-ti/PYrrL2J11P2ed0x7zm8v3gLrY0cue1iSba+8glY+p31ZPOr5ogaJw7ZARgoS8\n\
-BwjyRymXQp+8Dete0TELKOL2/itDOPGHW07SsVWOR6cmX4VlRRcWB5KejaNvdrE5\n\
-4XFtOd04NMgWI63uqZc4zkRa+kwEZtmbz3tHSdRCCE+Y7YVP6IUf/w6YPQFQriWY\n\
-FiA6fD10eB+BlIUqIw80VgjsBKmCwvKkn4jg8kibXgj4/TzQSx77uYokw1EqQ2wk\n\
-OZoaEtcubsNMquuLCMWijYhGBBgRAgAGBQI36lRyAAoJECGRgM3bQqYOhyYAnj7h\n\
-VDY/FJAGqmtZpwVp9IlitW5tAJ4xQApr/jNFZCTksnI+4O1765F7tA==\n\
-";
-
-/* This is the unarmored RPM-PGP-KEY public key. */
-const char * pgpsig = "\
-mQCNAzEpXjUAAAEEAKG4/V9oUSiDc9wIge6Bmg6erDGCLzmFyioAho8kDIJSrcmi\n\
-F9qTdPq+fj726pgW1iSb0Y7syZn9Y2lgQm5HkPODfNi8eWyTFSxbr8ygosLRClTP\n\
-xqHVhtInGrfZNLoSpv1LdWOme0yOpOQJnghdOMzKXpgf5g84vaUg6PHLopv5AAUR\n\
-tCpSZWQgSGF0IFNvZnR3YXJlLCBJbmMuIDxyZWRoYXRAcmVkaGF0LmNvbT6JAJUD\n\
-BRAyA5tUoyDApfg4JKEBAUzSA/9QdcVsu955vVyZDk8uvOXWV0X3voT9B3aYMFvj\n\
-UNHUD6F1VFruwQHVKbGJEq1o5MOA6OXKR3vJZStXEMF47TWXJfQaflgl8ywZTH5W\n\
-+eMlKau6Nr0labUV3lmsAE4Vsgu8NCkzIrp2wNVbeW2ZAXtrKswV+refLquUhp7l\n\
-wMpH9IkAdQMFEDGttkRNdXhbO1TgGQEBAGoC/j6C22PqXIyqZc6fG6J6Jl/T5kFG\n\
-xH1pKIzua5WCDDugAgnuOJgywa4pegT4UqwEZiMTAlwT6dmG1CXgKB+5V7lnCjDc\n\
-JZLni0iztoe08ig6fJrjNGXljf7KYXzgwBftQokAlQMFEDMQzo2MRVM9rfPulQEB\n\
-pLoD/1/MWv3u0Paiu14XRvDrBaJ7BmG2/48bA5vKOzpvvoNRO95YS7ZEtqErXA7Y\n\
-DRO8+C8f6PAILMk7kCk4lNMscS/ZRzu5+J8cv4ejsFvxgJBBU3Zgp8AWdWOpvZ0I\n\
-wW//HoDUGhOxlEtymljIMFBkj4SysHWhCBUfA9Xy86kouTJQiQCVAwUQMxDOQ50a\n\
-feTWLUSJAQFnYQQAkt9nhMTeioREB1DvJt+vsFyOj//o3ThqK5ySEP3dgj62iaQp\n\
-JrBmAe5XZPw25C/TXAf+x27H8h2QbKgq49VtsElFexc6wO+uq85fAPDdyE+2XyNE\n\
-njGZkY/TP2F/jTB0sAwJO+xFCHmSYkcBjzxK/2LMD+O7rwp2UCUhhl9QhhqJAJUD\n\
-BRAx5na6pSDo8cuim/kBARmjA/4lDVnV2h9KiNabp9oE38wmGgu5m5XgUHW8L6du\n\
-iQDnwO5IgXN2vDpKGxbgtwv6iYYmGd8IRQ66uJvOsxSv3OR7J7LkCHuI2b/s0AZn\n\
-c79DZaJ2ChUCZlbNQBMeEdrFWif9NopY+d5+2tby1onu9XOFMMvomxL3NhctElYR\n\
-HC8Xw4kAlQMFEDHmdTtURTdEKY1MpQEBEtEEAMZbp1ZFrjiHkj2aLFC1S8dGRbSH\n\
-GUdnLP9qLPFgmWekp9E0o8ZztALGVdqPfPF3N/JJ+AL4IMrfojd7+eZKw36Mdvtg\n\
-dPI+Oz4sxHDbDynZ2qspD9Om5yYuxuz/Xq+9nO2IlsAnEYw3ag3cxat0kvxpOPRe\n\
-Yy+vFpgfDNizr3MgiQBVAwUQMXNMXCjtrosVMemRAQEDnwH7BsJrnnh91nI54LAK\n\
-Gcq3pr8ld0PAtWJmNRGQvUlpEMXUSnu59j2P1ogPNjL3PqKdVxk5Jqgcr8TPQMf3\n\
-V4fqXokAlQMFEDFy+8YiEmsRQ3LyzQEB+TwD/03QDslXLg5F3zj4zf0yI6ikT0be\n\
-5OhZv2pnkb80qgdHzFRxBOYmSoueRKdQJASd8F9ue4b3bmf/Y7ikiY0DblvxcXB2\n\
-sz1Pu8i2Zn9u8SKuxNIoVvM8/STRVkgPfvL5QjAWMHT9Wvg81XcI2yXJzrt/2f2g\n\
-mNpWIvVOOT85rVPIiQCVAwUQMVPRlBlzviMjNHElAQG1nwP/fpVX6nKRWJCSFeB7\n\
-leZ4lb+y1uMsMVv0n7agjJVw13SXaA267y7VWCBlnhsCemxEugqEIkI4lu/1mgtw\n\
-WPWSE0BOIVjj0AA8zp2T0H3ZCCMbiFAFJ1P2Gq2rKr8QrOb/08oH1lEzyz0j/jKh\n\
-qiXAxdlB1wojQB6yLbHvTIe3rZGJAHUDBRAxKetfzauiKSJ6LJEBAed/AvsEiGgj\n\
-TQzhsZcUuRNrQpV0cDGH9Mpril7P7K7yFIzju8biB+Cu6nEknSOHlMLl8usObVlk\n\
-d8Wf14soHC7SjItiGSKtI8JhauzBJPl6fDDeyHGsJKo9f9adKeBMCipCFOuJAJUD\n\
-BRAxKeqWRHFTaIK/x+0BAY6eA/4m5X4gs1UwOUIRnljo9a0cVs6ITL554J9vSCYH\n\
-Zzd87kFwdf5W1Vd82HIkRzcr6cp33E3IDkRzaQCMVw2me7HePP7+4Ry2q3EeZMbm\n\
-NE++VzkxjikzpRb2+F5nGB2UdsElkgbXinswebiuOwOrocLbz6JFdDsJPcT5gVfi\n\
-z15FuA==\n\
-";
-
-static int doit(const char *sig)
-{
- const char *s, *t;
- unsigned char * dec;
- unsigned char * d;
- size_t declen;
- char * enc;
- int rc;
- int len = 0;
- int i;
-
-if (_debug)
-fprintf(stderr, "*** sig is\n%s\n", sig);
-
- if ((rc = b64decode(sig, (void **)&dec, &declen)) != 0) {
- fprintf(stderr, "*** B64decode returns %d\n", rc);
- exit(rc);
- }
-
- for (d = dec; d < (dec + declen); d += len) {
- len = pr_keypkt(d);
- if (len <= 0)
- exit(len);
- }
-
- if ((enc = b64encode(dec, declen)) == NULL) {
- fprintf(stderr, "*** B64encode returns %d\n", rc);
- exit(4);
- }
-
-if (_debug)
-fprintf(stderr, "*** enc is\n%s\n", enc);
-
-rc = 0;
-for (i = 0, s = sig, t = enc; *s & *t; i++, s++, t++) {
- if (*s == '\n') s++;
- if (*t == '\n') t++;
- if (*s == *t) continue;
-fprintf(stderr, "??? %5d %02x != %02x '%c' != '%c'\n", i, (*s & 0xff), (*t & 0xff), *s, *t);
- rc = 5;
-}
-
- return rc;
-}
-
-int
-main (int argc, char *argv[])
-{
- int rc;
-
-fprintf(stderr, "============================================== RPM-GPG-KEY\n");
- if ((rc = doit(gpgsig)) != 0)
- return rc;
-
-fprintf(stderr, "============================================== RPM-PGP-KEY\n");
- if ((rc = doit(pgpsig)) != 0)
- return rc;
-
- return rc;
-}
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
-#include "beecrypt.h"
#include "aes.h"
-#include "debug.h"
-
extern int fromhex(byte*, const char*);
struct vector
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
#include "blowfish.h"
-#include "debug.h"
-
extern int fromhex(byte*, const char*);
struct vector
switch (table[i].op)
{
- case NOCRYPT:
- return -1;
- break;
case ENCRYPT:
if (blowfishEncrypt(¶m, (uint32_t*) dst, (const uint32_t*) src))
return -1;
--- /dev/null
+#include "mp.h"
+
+void hexdump(byte* b, int count)
+{
+ int i;
+
+ for (i = 0; i < count; i++)
+ {
+ printf("%02x", b[i]);
+ if ((i & 0xf) == 0xf)
+ printf("\n");
+ }
+ if (i & 0xf)
+ printf("\n");
+}
+
+int main()
+{
+ int rc;
+ mpw x[4];
+ byte o[9];
+
+ mpsetw(4, x, 255);
+ mpmultwo(4, x);
+ rc = i2osp(o, 9, x, 4);
+
+ printf("rc = %d\n", rc);
+ hexdump(o, 9);
+
+ rc = os2ip(x, 4, o, 9);
+ printf("rc = %d\n", rc);
+ mpprintln(4, x);
+
+ exit(0);
+}
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
+
#include "beecrypt.h"
#include "dldp.h"
-#include "debug.h"
int main()
{
mpnfree(&gq);
dldp_pFree(¶ms);
-
+
randomGeneratorContextFree(&rngc);
}
else
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
+
#include "beecrypt.h"
#include "dlkp.h"
#include "dsa.h"
-#include "debug.h"
-
-static const char* dsa_p = "8df2a494492276aa3d25759bb06869cbeac0d83afb8d0cf7cbb8324f0d7882e5d0762fc5b7210eafc2e9adac32ab7aac49693dfbf83724c2ec0736ee31c80291";
-static const char* dsa_q = "c773218c737ec8ee993b4f2ded30f48edace915f";
-static const char* dsa_g = "626d027839ea0a13413163a55b4cb500299d5522956cefcb3bff10f399ce2c2e71cb9de5fa24babf58e5b79521925c9cc42e9f6f464b088cc572af53e6d78802";
-static const char* dsa_x = "2070b3223dba372fde1c0ffc7b2e3b498b260614";
-static const char* dsa_y = "19131871d75b1612a819f29d78d1b0d7346f7aa77bb62a859bfd6c5675da9d212d3a36ef1672ef660b8c7c255cc0ec74858fba33f44c06699630a76b030ee333";
-
-static const char* dsa_k = "358dad571462710f50e254cf1a376b2bdeaadfbf";
-static const char* dsa_hm = "a9993e364706816aba3e25717850c26c9cd0d89d";
-
-static const char* expect_r = "8bac1ab66410435cb7181f95b16ab97c92b341c0";
-static const char* expect_s = "41e2345f1f56df2458f426d155b4ba2db6dcd8c8";
+struct vector
+{
+ const char* p;
+ const char* q;
+ const char* g;
+ const char* y;
+ const char* m;
+ const char* r;
+ const char* s;
+};
+
+#define NVECTORS 2
+
+struct vector table[NVECTORS] = {
+ { "8df2a494492276aa3d25759bb06869cbeac0d83afb8d0cf7cbb8324f0d7882e5d0762fc5b7210eafc2e9adac32ab7aac49693dfbf83724c2ec0736ee31c80291",
+ "c773218c737ec8ee993b4f2ded30f48edace915f",
+ "626d027839ea0a13413163a55b4cb500299d5522956cefcb3bff10f399ce2c2e71cb9de5fa24babf58e5b79521925c9cc42e9f6f464b088cc572af53e6d78802",
+ "19131871d75b1612a819f29d78d1b0d7346f7aa77bb62a859bfd6c5675da9d212d3a36ef1672ef660b8c7c255cc0ec74858fba33f44c06699630a76b030ee333",
+ "a9993e364706816aba3e25717850c26c9cd0d89d",
+ "8bac1ab66410435cb7181f95b16ab97c92b341c0",
+ "41e2345f1f56df2458f426d155b4ba2db6dcd8c8" },
+ { "A62927E72F9F12CD31C50E30D0E9B580539C4F7CA2AC3E2EE244C834303B039A1A388FDE4DCD42B5402807047FBEC0DB09ECF897CD2B8546A893499B3A8A409C52476708EAD0124E43F31CA2495A950731D254F56F4F39AC379E0620E15A9CC5A8EA5100CD1137012093E11F73A1E38FAEB95588BB54A48913977D1A1EC6986F",
+ "C4243BE451ECBA6F87F539A7F899D4047208B091",
+ "9C8D21312FD7358D86D82E8F237E99A9DFC375529456420F159361C40A76A891DA8D6CEE8EB1BDEC97CA60CCBE921BED5EB29EC35A2EFCA295311585753EFABBADF599620EA0FB8489FBEE60EDE6D5A99DD3506F37CC21741D306BEE15BBB8EAA1261C2DC18221FB5C6A08602B3E1084029285DF161A2CB6B179830C31C351A3",
+ "7602862B1A4F6F154BE21AFD86CF2AADD6393AE0EBBB5781CB82758C9A360A540BBCC3CBBF014509FD0ED2FC30C6ED0959C43954CF058854B8469DD4247AC463D4C10B6479C8B4FBE56E97067A7FC4E7F1A95507A0B6D70328534C37B590DB8ED12BB460FC3232758F9B64D7BD63BD320FF1FA635A3F77D13D71A8AD4E8B5469",
+ "73F6679451E5F98CA60235E6B4C58FC14043C56D",
+ "22EDDAD362C3209DF597070D144E8FDDB8B65E53",
+ "3AB093E7A7CD30125036B384C6C114317F10E10D" }
+};
int main()
{
- int failures = 0;
+ int i, failures = 0;
dlkp_p keypair;
mpnumber hm, r, s, k, e_r, e_s;
- dlkp_pInit(&keypair);
+ for (i = 0; i < NVECTORS; i++)
+ {
+ dlkp_pInit(&keypair);
- mpbsethex(&keypair.param.p, dsa_p);
- mpbsethex(&keypair.param.q, dsa_q);
- mpnsethex(&keypair.param.g, dsa_g);
- mpnsethex(&keypair.y, dsa_y);
- mpnsethex(&keypair.x, dsa_x);
+ mpbsethex(&keypair.param.p, table[i].p);
+ mpbsethex(&keypair.param.q, table[i].q);
+ mpnsethex(&keypair.param.g, table[i].g);
+ mpnsethex(&keypair.y, table[i].y);
- mpnzero(&e_r);
- mpnzero(&e_s);
+ mpnzero(&hm);
+ mpnsethex(&hm, table[i].m);
- mpnsethex(&e_r, expect_r);
- mpnsethex(&e_s, expect_s);
+ mpnzero(&e_r);
+ mpnzero(&e_s);
- mpnzero(&hm);
- mpnsethex(&hm, dsa_hm);
+ mpnsethex(&e_r, table[i].r);
+ mpnsethex(&e_s, table[i].s);
- mpnzero(&r);
- mpnzero(&s);
+ mpnzero(&r);
+ mpnzero(&s);
- /* first test, verify the signature result from NIST FIPS 186-1 */
- if (!dsavrfy(&keypair.param.p, &keypair.param.q, &keypair.param.g, &hm, &keypair.y, &e_r, &e_s))
- failures++;
+ /* first test, verify the signature result from NIST FIPS 186-1 */
+ if (!dsavrfy(&keypair.param.p, &keypair.param.q, &keypair.param.g, &hm, &keypair.y, &e_r, &e_s))
+ failures++;
- mpnfree(&s);
- mpnfree(&r);
+ mpnfree(&s);
+ mpnfree(&r);
- mpnfree(&hm);
+ mpnfree(&hm);
- mpnfree(&e_s);
- mpnfree(&e_r);
+ mpnfree(&e_s);
+ mpnfree(&e_r);
- dlkp_pFree(&keypair);
+ dlkp_pFree(&keypair);
+ }
return failures;
}
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
+
#include "hmacmd5.h"
-#include "debug.h"
struct vector
{
struct vector table[7] =
{
{ 128,
- "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
+ (byte*) "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
8,
- "Hi There",
- "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d" },
+ (byte*) "Hi There",
+ (byte*) "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d" },
{ 32,
- "Jefe",
+ (byte*) "Jefe",
28,
- "what do ya want for nothing?",
- "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38" },
+ (byte*) "what do ya want for nothing?",
+ (byte*) "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38" },
{ 128,
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ (byte*) "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
50,
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
- "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6" },
+ (byte*) "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
+ (byte*) "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6" },
{ 200,
- "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
+ (byte*) "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
50,
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
- "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea\x3a\x75\x16\x47\x46\xff\xaa\x79" },
+ (byte*) "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
+ (byte*) "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea\x3a\x75\x16\x47\x46\xff\xaa\x79" },
{ 128,
- "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
+ (byte*) "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
20,
- "Test With Truncation",
- "\x56\x46\x1e\xf2\x34\x2e\xdc\x00\xf9\xba\xb9\x95\x69\x0e\xfd\x4c"},
+ (byte*) "Test With Truncation",
+ (byte*) "\x56\x46\x1e\xf2\x34\x2e\xdc\x00\xf9\xba\xb9\x95\x69\x0e\xfd\x4c"},
{ 640,
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ (byte*) "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
54,
- "Test Using Larger Than Block-Size Key - Hash Key First",
- "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f\x0b\x62\xe6\xce\x61\xb9\xd0\xcd" },
+ (byte*) "Test Using Larger Than Block-Size Key - Hash Key First",
+ (byte*) "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f\x0b\x62\xe6\xce\x61\xb9\xd0\xcd" },
{ 640,
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ (byte*) "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
73,
- "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
- "\x6f\x63\x0f\xad\x67\xcd\xa0\xee\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e" }
+ (byte*) "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
+ (byte*) "\x6f\x63\x0f\xad\x67\xcd\xa0\xee\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e" }
};
int main()
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
+
#include "hmacsha1.h"
-#include "debug.h"
struct vector
{
struct vector table[7] =
{
{ 160,
- "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
+ (byte*) "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
8,
- "Hi There",
- "\xb6\x17\x31\x86\x55\x05\x72\x64\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1\x46\xbe\x00" },
+ (byte*) "Hi There",
+ (byte*) "\xb6\x17\x31\x86\x55\x05\x72\x64\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1\x46\xbe\x00" },
{ 32,
- "Jefe",
+ (byte*) "Jefe",
28,
- "what do ya want for nothing?",
- "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79" },
+ (byte*) "what do ya want for nothing?",
+ (byte*) "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79" },
{ 160,
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ (byte*) "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
50,
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
- "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3" },
+ (byte*) "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
+ (byte*) "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3" },
{ 200,
- "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
+ (byte*) "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
50,
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
- "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda" },
+ (byte*) "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
+ (byte*) "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda" },
{ 160,
- "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
+ (byte*) "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
20,
- "Test With Truncation",
- "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04" },
+ (byte*) "Test With Truncation",
+ (byte*) "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04" },
{ 640,
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ (byte*) "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
54,
- "Test Using Larger Than Block-Size Key - Hash Key First",
- "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12" },
+ (byte*) "Test Using Larger Than Block-Size Key - Hash Key First",
+ (byte*) "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12" },
{ 640,
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ (byte*) "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
73,
- "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
- "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91" }
+ (byte*) "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
+ (byte*) "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91" }
};
int main()
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
+
#include "md5.h"
-#include "debug.h"
struct vector
{
-#include "system.h"
+#include <stdio.h>
+
#include "beecrypt.h"
#include "mp.h"
-#include "debug.h"
#define INIT 0xdeadbeefU;
{
int i, carry;
mpw x[4];
+ mpw y[4];
mpw r[8];
for (i = 0; i < 4; i++)
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
#include "beecrypt.h"
-#include "mpbarrett.h"
+#include "mpnumber.h"
-#include "debug.h"
+struct vector
+{
+ const char* m;
+ const char* k;
+ const char* inv_k;
+};
+
+#define NVECTORS 5
+
+struct vector table[NVECTORS] = {
+ { "c773218c737ec8ee993b4f2ded30f48edace915f",
+ "358dad571462710f50e254cf1a376b2bdeaadfbf",
+ "0d5167298202e49b4116ac104fc3f415ae52f917" },
+ { "fe95df16069b516859ba036ef0e563a7b6a86409",
+ "eedd5539e982b570a5f8efc73f243a04f312920d",
+ "f64a00a9ce43f4128e5eee1991b2e08c6008ba4e" },
+ { "fe95df16069b516859ba036ef0e563a7b6a86409",
+ "d75f6d17eb243613eacc0dcbb41db4e5a3364b07",
+ "e90aa0a992ebd4c9176f0e20a885101218111a73" },
+ { "fe95df16069b516859ba036ef0e563a7b6a86409",
+ "759ea04b65f66184af22fcabfe99a1cda3a79236",
+ "2c701a52078afe539a281cba7f35df34a7a125a4" },
+ { "80277b4855a39cb9a98b2107cc1efb29f1832f727df05931cdd4a64cd78363134bf2abe78723784d2013a26875afe13f04526399c6b0cee659abb60dc8263400",
+ "10001",
+ "6e5f92b24defc7ffafa20024b30ccbcce810d0408f6efda3035f6e8b27e224e66db6e78f54b89bd7f11477fff7bc2f071335d24a92f19c8090226f7d97303001" }
-static const char* dsa_q = "c773218c737ec8ee993b4f2ded30f48edace915f";
-static const char* dsa_k = "358dad571462710f50e254cf1a376b2bdeaadfbf";
-static const char* dsa_inv_k = "0d5167298202e49b4116ac104fc3f415ae52f917";
+};
int main()
{
- int failures = 0;
+ int i, failures = 0;
- mpnumber q;
+ mpnumber m;
mpnumber k;
mpnumber inv_k;
mpnumber inv;
- mpnzero(&q);
+ mpnzero(&m);
mpnzero(&k);
mpnzero(&inv_k);
mpnzero(&inv);
- mpnsethex(&q, dsa_q);
- mpnsethex(&k, dsa_k);
- mpnsethex(&inv_k, dsa_inv_k);
-
- if (mpninv(&inv, &k, &q))
+ for (i = 0; i < NVECTORS; i++)
{
- if (mpnex(inv.size, inv.data, inv_k.size, inv_k.data))
+ mpnsethex(&m, table[i].m);
+ mpnsethex(&k, table[i].k);
+ mpnsethex(&inv_k, table[i].inv_k);
+
+ if (mpninv(&inv, &k, &m))
{
- printf("mpninv return unexpected result\n");
- mpprintln(inv_k.size, inv_k.data);
- mpprintln(inv.size, inv.data);
+ if (mpnex(inv.size, inv.data, inv_k.size, inv_k.data))
+ {
+ printf("mpninv return unexpected result\n");
+ failures++;
+ }
+ }
+ else
+ {
+ printf("mpninv failed\n");
failures++;
}
}
- else
- {
- printf("mpninv failed\n");
- failures++;
- }
+
+ mpnfree(&m);
+ mpnfree(&k);
+ mpnfree(&inv_k);
+ mpnfree(&inv);
return failures;
}
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
+
#include "beecrypt.h"
#include "rsa.h"
-#include "debug.h"
static const char* rsa_n = "bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb";
static const char* rsa_e = "11";
rsakp keypair;
mpnumber m, cipher, decipher;
+ randomGeneratorContext rngc;
+
+ if (randomGeneratorContextInit(&rngc, randomGeneratorDefault()) == 0)
+ {
+ /* First we do the fixed value verification */
+ rsakpInit(&keypair);
+
+ mpbsethex(&keypair.n, rsa_n);
+ mpnsethex(&keypair.e, rsa_e);
+ mpbsethex(&keypair.p, rsa_p);
+ mpbsethex(&keypair.q, rsa_q);
+ mpnsethex(&keypair.dp, rsa_d1);
+ mpnsethex(&keypair.dq, rsa_d2);
+ mpnsethex(&keypair.qi, rsa_c);
+
+ mpnzero(&m);
+ mpnzero(&cipher);
+ mpnzero(&decipher);
+
+ mpnsethex(&m, rsa_m);
+
+ /* it's safe to cast the keypair to a public key */
+ if (rsapub(&keypair.n, &keypair.e, &m, &cipher))
+ failures++;
+
+ if (rsapricrt(&keypair.n, &keypair.p, &keypair.q, &keypair.dp, &keypair.dq, &keypair.qi, &cipher, &decipher))
+ failures++;
+
+ if (mpnex(m.size, m.data, decipher.size, decipher.data))
+ failures++;
- rsakpInit(&keypair);
+ mpnfree(&decipher);
+ mpnfree(&cipher);
+ mpnfree(&m);
- mpbsethex(&keypair.n, rsa_n);
- mpnsethex(&keypair.e, rsa_e);
- /* we don't set n, as we're going to use CRT */
- mpbsethex(&keypair.p, rsa_p);
- mpbsethex(&keypair.q, rsa_q);
- mpnsethex(&keypair.d1, rsa_d1);
- mpnsethex(&keypair.d2, rsa_d2);
- mpnsethex(&keypair.c, rsa_c);
+ rsakpFree(&keypair);
- mpnzero(&m);
- mpnzero(&cipher);
- mpnzero(&decipher);
+ mpnzero(&m);
+ mpnzero(&cipher);
+ mpnzero(&decipher);
- mpnsethex(&m, rsa_m);
+ /* Now we generate a keypair and do some tests on it */
+ rsakpMake(&keypair, &rngc, 512);
- /* it's safe to cast the keypair to a public key */
- if (rsapub((rsapk*) &keypair, &m, &cipher))
- failures++;
+ /* generate a random m in the range 0 < m < n */
+ mpbnrnd(&keypair.n, &rngc, &m);
- if (rsapricrt(&keypair, &cipher, &decipher))
- failures++;
-
- if (mpnex(m.size, m.data, decipher.size, decipher.data))
- failures++;
+ /* it's safe to cast the keypair to a public key */
+ if (rsapub(&keypair.n, &keypair.e, &m, &cipher))
+ failures++;
- mpnfree(&decipher);
- mpnfree(&cipher);
- mpnfree(&m);
+ if (rsapricrt(&keypair.n, &keypair.p, &keypair.q, &keypair.dp, &keypair.dq, &keypair.qi, &cipher, &decipher))
+ failures++;
- rsakpFree(&keypair);
+ if (mpnex(m.size, m.data, decipher.size, decipher.data))
+ failures++;
+ rsakpFree(&keypair);
+ }
return failures;
}
* \ingroup UNIT_m
*/
-#include "system.h"
+#include <stdio.h>
+
#include "sha1.h"
#include "memchunk.h"
-#include "debug.h"
struct vector
{
*
*/
-#include "system.h"
+#include <stdio.h>
+
#include "sha256.h"
-#include "debug.h"
struct vector
{
*
*/
-#include "system.h"
-
#include "beecrypt.h"
-#include "debug.h"
+#include <string.h>
int fromhex(byte* data, const char* hexdata)
{
/*!\file timestamp.c
* \brief Java compatible 64-bit timestamp.
- * \author Bob Deblier <bob@virtualunlimited.com>
+ * \author Bob Deblier <bob.deblier@pandora.be>
*/
-#include "system.h"
-#include "timestamp.h"
-#include "debug.h"
+#define BEECRYPT_DLL_EXPORT
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "beecrypt/timestamp.h"
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# elif HAVE_TIME_H
+# include <time.h>
+# endif
+#endif
javalong timestamp()
{
# if HAVE_GETTIMEOFDAY
struct timeval now;
- (void) gettimeofday(&now, 0);
+ gettimeofday(&now, 0);
tmp = ((javalong) now.tv_sec) * 1000 + (now.tv_usec / 1000);
# else
-/** \ingroup JAVA_m
- * \file timestamp.h
- *
- * Java-compatible 64 bit timestamp, header.
- */
-
/*
+ * timestamp.h
+ *
+ * Java-compatible 64 bit timestamp, header
+ *
* Copyright (c) 1999, 2000 Virtual Unlimited B.V.
*
+ * Author: Bob Deblier <bob@virtualunlimited.com>
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
#ifndef _TIMESTAMP_H
#define _TIMESTAMP_H
-#include "beecrypt.h"
+#include "beecrypt/beecrypt.h"
#if HAVE_LONG_LONG
# define ONE_SECOND 1000LL
extern "C" {
#endif
-/**
- */
-BEECRYPTAPI /*@unused@*/
+BEECRYPTAPI
javalong timestamp(void);
#ifdef __cplusplus
--- /dev/null
+/*
+ * Copyright (c) 2000, 2001, 2002 Virtual Unlimited B.V.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * 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,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/*!\file win.h
+ * \brief BeeCrypt API, windows headers.
+ * \author Bob Deblier <bob.deblier@pandora.be>
+ */
+
+#ifndef _BEECRYPT_WIN_H
+#define _BEECRYPT_WIN_H
+
+#define _REENTRANT
+
+#if !defined(_WIN32_WINNT)
+#define _WIN32_WINNT 0x0400
+#endif
+
+#include <windows.h>
+
+#if __MWERKS__
+# if __INTEL__
+# define WORDS_BIGENDIAN 0
+# else
+# error Unknown CPU type in MetroWerks CodeWarrior
+# endif
+#elif defined(_MSC_VER)
+# if defined(_M_IX86)
+# define WORDS_BIGENDIAN 0
+# define ROTL32(x, s) _rotl(x, s)
+# define ROTR32(x, s) _rotr(x, s)
+# else
+# error Unknown CPU type in Microsoft Visual C
+# endif
+#else
+# error Unknown compiler for WIN32
+#endif
+
+#if defined(_MSC_VER) || __MWERKS__
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define HAVE_ERRNO_H 1
+#define HAVE_CTYPE_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_TIME_H 1
+
+#define HAVE_SYS_TYPES_H 0
+#define HAVE_SYS_TIME_H 0
+
+#define HAVE_THREAD_H 0
+#define HAVE_SYNCH_H 0
+#define HAVE_PTHREAD_H 0
+#define HAVE_SEMAPHORE_H 0
+
+#define HAVE_TERMIO_H 0
+#define HAVE_SYS_AUDIOIO_H 0
+#define HAVE_SYS_IOCTL_H 0
+#define HAVE_SYS_SOUNDCARD_H 0
+
+#define HAVE_GETTIMEOFDAY 0
+#define HAVE_GETHRTIME 0
+
+#define HAVE_DEV_TTY 0
+#define HAVE_DEV_AUDIO 0
+#define HAVE_DEV_DSP 0
+#define HAVE_DEV_RANDOM 0
+#define HAVE_DEV_URANDOM 0
+#define HAVE_DEV_TTY 0
+
+#else
+#error Not set up for this compiler
+#endif
+
+#if __MWERKS__
+#define HAVE_SYS_STAT_H 0
+
+#define HAVE_LONG_LONG 1
+#define HAVE_UNSIGNED_LONG_LONG 1
+
+#define HAVE_64_BIT_INT 1
+#define HAVE_64_BIT_UINT 1
+
+typedef char int8_t;
+typedef short int16_t;
+typedef long int32_t;
+typedef long long int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned long uint32_t;
+typedef unsigned long long uint64_t;
+
+#elif defined(_MSC_VER)
+#define HAVE_SYS_STAT_H 1
+
+#define HAVE_LONG_LONG 0
+#define HAVE_UNSIGNED_LONG_LONG 0
+
+#define HAVE_64_BIT_INT 1
+#define HAVE_64_BIT_UINT 1
+
+typedef signed char int8_t;
+typedef signed short int16_t;
+typedef signed int int32_t;
+typedef signed __int64 int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned __int64 uint64_t;
+
+typedef long off_t;
+
+#endif
+
+#define MP_WBITS 32U
+
+typedef HANDLE bc_cond_t;
+typedef HANDLE bc_mutex_t;
+typedef DWORD bc_thread_t;
+
+#endif