Cryptography Reference
In-Depth Information
CHAPTER 3
Interface Semantics
When people hear some words, they normally believe
that there's some thought behind them.
—Goethe,
Faust
,Part1
I
N THE FOLLOWING WE SHALL
set some fundamental properties that relate to the
behavior of the interface and the use of FLINT/C functions. First we shall consider
the textual representation of
CLINT
objects and FLINT/C functions, but primarily
we wish to clarify some fundamentals of the implementation that are important
to the use of the functions.
The functions of the FLINT/C package are identified with the convention
that their names end with “
_l
”; for example,
add_l
denotes the addition function.
Designators of
CLINT
objects likewise end with an underscore and an appended
l
.
For the sake of simplicity we shall equate from now on, when conditions permit,
a
CLINT
object
n_l
with the value that it represents.
The representation of a FLINT/C function begins with a header, which
contains the syntactic and semantic description of the function interface. Such
function headers typically look something like the following.
Function:
a brief description of the function
int f_l (CLINT a_l, CLINT b_l, CLINT c_l);
Syntax:
a_l, b_l
(operands)
Input:
c_l
(result)
Output:
Return:
0 if all is ok
otherwise, a warning or error message
Here we distinguish, among other things, between
output
and
return
value:
While
output
refers to the values that are stored by the function in the passed
arguments, by
return
we mean the values that the function returns via a
return
command. Except for a few cases (for example, the functions
ld_l()
, Section 10.3,
and
twofact_l()
, Section 10.4.1), the return value consists of status information
or error messages.
Parameters other than those involved with
output
are not changed by the
function. Calls of the form
f_l(a_l, b_l, a_l)
, where
a_l
and
b_l
are used