Copyright © 1998 W3C (MIT, INRIA, Keio ), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
This document has been reviewed by W3C Members and other interested parties and has been endorsed by the Director as a W3C Recommendation. It is a stable document and may be used as reference material or cited as a normative reference from another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its widespread deployment. This enhances the functionality and interoperability of the Web.
As a result of comments supplied during the balloting period, the syntax of quoted ISO dates has been changed from strictly PICS 1.1 conformant to permit either PICS 1.1 or ISO conformant forms. At the same time we have added optional seconds and decimal fractions of seconds fields to support those cryptographic algorithms that require sub-minute precision in timestamps.
A confusing reference to sigblocks in equivalent standalone labels is fixed. The title is changed to indicate that this is a signature specification specifically for PICS labels.
At the time this Recommendation was published a possible revision to PICS 1.1 was being discussed. That revision to PICS 1.1 was expected to be called PICS 1.2 and was expected to have no significant impact on this specification. All references herein to "PICS 1.1" should be interpreted to mean "PICS 1.1 and PICS 1.2".
Comments on this Recommendation may be sent to w3c-dsig-ask@w3.org.
This document is part of the W3C Digital Signature Project.
A list of current W3C Recommendations, Proposed Recommendations and Working Drafts can be found at: http://www.w3.org/TR
In this specification statement is any statement that can be expressed with PICS 1.1. This document also provides detailed usage guidelines for creating PICS 1.1 labels that are valid DSig 1.0 Signature labels.
DSig 1.0 signature labels inherit both a means of transporting a signature block data and a simple framework for making the machine-readable assertions from the underlying PICS framework. PICS compliant applications can syntactically parse DSig 1.0 signature labels; only cryptographic functions need to be added to PICS-aware applications in order to make use of the semantic content of a DSig signature.
In its simplest form, a DSig 1.0 signature label is a signed statement about an information resource. This document describes two DSig-specific extensions to standard PICS 1.1 labels: resinfo and sigblock . The resinfo extension is used to create cryptographic links between the signature label and the information resource described by the label. Typically this linkage is created through the use of one or more cryptographic hash functions. The sigblock extension contains one or more digital signatures of the other contents of the label.
In DSig 1.0, it is important to note that:
W3C recommendations and working drafts related to this document include:
At the core of DSig 1.0 is the PICS 1.1 label, so we begin by reviewing the PICS 1.1 architecture and illustrating how DSig 1.0 signature labels are built on top of PICS 1.1 labels.
A labeler, given authority by the rating service, uses the criteria established by them along with the rating system to label content. These content labels contain a statement about the content of the resource being labeled and contain a link back to the service URL. Content labels can come in the content itself, with the content or from a trusted third party such as a label bureau. Policies determine what actions are taken based on the specific statements in the content label. If a content label is based on an unknown service URL, it is a simple (and potentially automatable) task to retrieve the appropriate service description file to understand what statements are being made in the label.
DSig 1.0 utilizes the PICS infrastructure as described above with a few differences:
A PICS labels contains one or more service sections:
(PICS-1.1
<Service 1 section>
<Service 2 section>
<Service 3 section>)
Where each service section contains options and labels:
<Service URL> <Service options for all labels in this section>
labels <options for this label> ratings <rating for this label>
<options for this label> ratings <rating for this label>
...
The general form for a label list (formatted for
presentation, and not showing error status codes) is:
(PICS-1.1
<service 1 url> [service 1 option...]
labels [label 1 option...] ratings (<category> <value> ...)
[label 2 option...] ratings (<category> <value> ...)
...
<service 2 url> [service 2 option...]
labels [label 3 option...] ratings (<category> <value> ...)
[label 4 option...] ratings (<category> <value> ...)
...
...)
Labels in a label list are grouped by service. Each service
may have service options which are inherited by each label within
the scope of the service; service options may be overridden by
individual label options. When a new service is identified in the
label list, the options from the previous service no longer
apply. Thus, in the above example label 4 could be equivalently
represented as:
(PICS-1.1
<service 2 url>
labels [ service 2 options + label 4 option...]
ratings (<category> <value> ...))
In DSig 1.0, we sign individual labels or portions thereof;
the details of signing labels are presented below.
PICS defines two distinct types of labels, specific and generic:
"The entity possessing the secret key that digitally signed this PICS 1.1 label had access to the secret key and the label at the same time and asserts that the statements made within the label are valid"
PICS label options can be divided into three groups. Options from the first group supply information about the document to which the label applies. Options from the second group supply information about the label itself. Options in the last group provides miscellaneous information.
PICS 1.1 also specified a signature option, signature-RSA-MD5, but its functionality was similarly limited. DSig replaces signature-RSA-MD5 with the sigblock extension. The sigblock extension may contain one or more signatures using any cryptographic algorithm; in addition, a sigblock may optionally include information in the form of certificates or links to certificates.
A DSig 1.0 Signature Label is a standard PICS 1.1 label. The DSig extensions resinfo and sigblock are both optional and can be used as needed. A PICS 1.1 label is only considered a DSig 1.0 Signature Label when it contains a sigblock extension.
The syntax of the extensions presented below is written in modified BNF. By convention,
Quoted strings are case sensitive but other literal elements are case insensitive. Multiple contiguous space characters are be treated as though they were a single space character except in quoted strings.
- a?
- a or nothing; optional a.
- a+
- one or more occurrences of a.
- a*
- zero or more occurrences of a.
Since the identifier is a URL, it must, when resolved, yield a a document. We recommend the returned document:
Any incompatible change in an identifier should be accomplished by creating an entirely new identifier URL.
URL identifiers for some common, popular signature suites are available. Of course, DSig 1.0 implementations are not restricted to using these or only these. To provide a base level of interoperability, all DSig 1.0 implementations are required to implement the signature suites listed in Appendix 3.
The resinfo extension is associated with a specific resource. This resource may be identified by the for option or may be implied by the context of the label (in the resource, delivered in the HTTP header with the resource, returned by a label bureau based on a request, etc.).
In the structure of a PICS label, the resinfo extension can be a service option and/or a label option. It functions identically to any other option with respect to inheritance within a service section from service option to label option. A single document can have many URLs; the URL used to retrieve a document may differ from the URL in the for option of a label that accompanies the document, but the document retrieved must be the same document or the hash(s) contained in the resinfo extension will not be valid.
Structurally, resinfo contains one or more hashes of the information resource; each hash includes a hash algorithm identifier, the actual hash of the resource and (optionally) the date the hash was computed.
("Hash Algorithm Identifier" "base64-string of hash" "hash date")
The hash
algorithm identifier is a quoted URL identifier
as defined above. It identifies the specific
hashing algorithm by which the following hash was computed. The
actual hash is given as a quoted base64 encoded string.
Usage notes:
resinfo-extension ::= 'extension ( optional '
'"http://www.w3.org/TR/1998/REC-DSig-label/resinfo-1_0"' resinfo-data+ ')'
resinfo-data ::= '(' HashAlgoID resource-hash hash-date? ')'
HashAlgoID ::= quotedURL
quotedURL ::= '"' URL '"'
resource-hash ::= '"base64-string"'
hash-date ::= quoted-ISO-date
quoted-ISO-date ::= '"' YYYY sep MM sep DD 'T' hh ':' mm[':' ss['.' f+]] Stz '"'
based on the PICS-defined ISO 8601:1988 date and time format, restricted
to the specific form described here:
sep ::= '.' | '-'
YYYY ::= four-digit year
MM ::= two-digit month (01=January, etc.)
DD ::= two-digit day of month (01 through 31)
hh ::= two digits of hour (00 through 23) (am/pm NOT allowed)
mm ::= two digits of minute (00 through 59)
ss ::= two digits of second (00 through 59), optional
f ::= digit(s) of fractions of second, optional
S ::= sign of time zone offset from UTC ('+' or '-')
tz ::= four digit amount of offset from UTC
(e.g., 1512 means 15 hours and 12 minutes)
For example, "1994-11-05T08:15-0500" is a valid quoted-ISO-date
denoting November 5, 1994, 8:15 am, US Eastern Standard Time
Notes:
1. The ISO 8601:1988 date and time format standard allows considerably
greater flexibility than that described here. DSig requires precisely
the syntax described here -- neither the time nor the time zone may
be omitted, none of the alternate ISO formats are permitted, and
the punctuation must be as specified here, Except:
2. ISO date described here differs from the PICS 1.1 and ISO 8601:1988
date and time format. PICS 1.1 uses '.' as separators while the ISO
standard calls for '-'. DSig supports both syntaxes. PICS 1.1 also
does not support the optional seconds and fractions of seconds fields
and permits minutes to range from 0 to 60.
base64-string ::= as defined in RFC-1521.
URL ::= as defined in RFC-1738.
The following example shows a valid DSig 1.0
resinfo
extension with two hashes of the referenced
information resource.
extension
( optional "http://www.w3.org/TR/1998/REC-DSig-label/resinfo-1_0"
( "http://www.w3.org/TR/1998/REC-DSig-label/SHA1-1_0" "base64 hash" )
( "http://www.w3.org/TR/1998/REC-DSig-label/MD5-1_0" "base64 hash"
"1997-02-05T08:15-0500" ) )
In this example, we begin with the
extension (
optional
tokens which identify this extension as an
optional extension to the PICS label within which it is
contained. This declaration is followed by a
URL
,
http://www.w3.org/TR/1998/REC-DSig-label/resinfo-1_0, which
provides a unique name for the extension. De-referencing the URL
provides human readable information on the extension. Finally we
have two repeating subsections of the extension, each of which
contain hash information. Here again, de-referencing the hash
algorithm identifier URL returns a human readable description,
this time of the hash algorithm. In our specific example above,
the first hash is of type SHA1. This is followed by the actual
hash data and followed by the date the hash was computed. The
second clause uses the MD5 hash algorithm.
extension
( optional "http://www.w3.org/TR/1998/REC-DSig-label/sigblock-1_0"
<attribution info> <signature>* ) )
Attribution Information supports any certificate format; the types of certificates included will depend on the public key infrastructure used by the application. Certificate format is indicated by the certificate family identifier, a quoted URL identifier as defined above. This certificate family identifier, when dereferenced, provides information on the format of the data to follow.
None of the information contained within the Attribution Information section is signed by the label's signature because certificates themselves are expected to be self-verifying. (More precisely, none of the information within the entire sigblock extension, including the Attribution Information section, contributes to the hash of the label that is signed as part of the signature option.) Thus, applications may augment the contents of the Attribution Information section without invalidating the signature on the label (e.g. newly-discovered certificates may be included in the Attribution Information section as they are found, or an expired certificate may be replaced).
Here is a structural representation of the Attribution Information section:
( "AttribInfo"
( "CertificateFamilyIdentifierURL" "Certificate Data")
( "CertificateFamilyIdentifierURL" "Certificate Data")
...)
Here is an example Attribution Information section:
( "AttribInfo"
( "http://www.w3.org/PICS/DSig/X509-1_0" "base64-x.509-cert")
( "http://www.w3.org/PICS/DSig/X509-1_0"
"http://ice-tel-ca/certs/DN/CN=Lipp,O=TU-Graz,OU=IAIK")
( "http://www.w3.org/PICS/DSig/pgpcert-1_0" "base64-pgp-signed-key")
( "http://www.w3.org/PICS/DSig/pgpcert-1_0"
"http://pgp.com/certstore/plipp@iaik.tu-graz.ac.at" ) )
( "Signature" SignatureSuite SigData+)Being crypto-neutral, DSig 1.0 does not prescribe the use of particular algorithms for generating hashes or digital signatures. DSig 1.0 also does not define any particular format for representing cryptographic information in the sigblock . Instead, we introduce the concept of "signature suites," which bundle together certain hashing algorithms, signature algorithms and representation format. Each digital signature includes a signature suite identifier (a quoted URL identifier as defined above) that tells applications how the signature was generated and how it should be parsed.
Each signature suite:
The following subsections specify the content of the SigInfo fields associated with each of these tokens.
( "ByKey" <Key-Value, SignatureSuite dependent> )The format of the included key necessarily depends on the particular signature suite used and must be specified in the signature suite document. Here is an example use of "ByKey" within the Digital Signature Algorithm (DSA) signature suite:
( "ByKey"
( "P" "base64-encoded-modulus" )
( "Q" "base64-encoded-divisor" )
( "G" "base64-encoded-number" )
( "Y" "base64-encoded-public-key" ) )
("ByHash" "base-64-encoded-hash-of-key" )
Details on how the hash for a key is generated is a
property of individual signature suites.
( "ByName" "Name-as-string-value" )
( "ByCert" ( "CA-Name-as-string-value" <CA-Serial-No.> ) )
The time that the signature was created is encoded as a quoted-ISO-Date. The format of a quoted-ISO-Date is defined below.
("on" quoted-ISO-Date)
Notice that the "on" time is advisory only to applications
verifying the digital signature; as this section is part of the
entire
sigblock
extension it is not
cryptographically protected by the signature itself. (The
contents of the
sigblock
do not contribute to the
hash of the label that is signed by the signature.) If a
cryptographically-protected date is desired, the correct way to
implement it is to include the date within another PICS label
extension; that extension may then contribute to the hash of the
canonicalized label.
( "exclude" field-list ) ( "include" field-list )The "include" and "exclude" SigData fields modify the default behavior of the label canonicalizer. "include" indicates that only the fields listed are included in the signature, "exclude" indicates that all fields are included in the signature except those listed. Before a label is signed, it is put into canonical form; the section "Creating an equivalent standalone label" below describes in detail the canonicalization process. PICS labels have many semantically-equivalent forms yet these forms yield distinct hashes, so it is important that signing and verifying applications canonicalize labels in the same way. After the equivalent standalone label has been generated following the default canonicalization rules, individual label options may be dropped if an "include" or "exclude" option is present. If an "include" option is present, any field not listed in the field-list is removed from the canonicalized label. If an "exclude" option is present, all fields listed in the field-list are removed from the canonicalized label. At most one "include" or "exclude"; field may appear; it is an error to have both an "include" and an "exclude" option.
The value associated with an "include" or "exclude" option (the "field-list") is a list of label fields to be included or excluded in the canonicalized form. There are three types of fields in PICS 1.1 labels: options, ratings transmit/value pairs, and extensions. The format of a field-list is as follows:
field-list ::= '(' option-list? ratings-list? extension-list? ')'
option-list ::= '(' "options" <options>* ')'
ratings-list ::= '(' "ratings" <ratings>* ')'
extension-list ::= '(' "extensions" <quoted-URL>* ')'
A field-list is simply at most, one each of: option-list,
ratings-list and extension-list, with their associated data. An
option-list is a list of PICS 1.1 label option names (e.g. "for"
or "by"). A ratings-list is a list of PICS 1.1 ratings service
transmit-names (e.g. "suds" in the example "Good Clean Fun"
rating service). An extension-list is a list of quoted-URLs where
each quoted-URL uniquely identifies a particular PICS 1.1 label
extension.
Note: The "include" and "exclude" SigData types exist in this specification strictly to overcome limitations in PICS 1.1 protocols. W3C's new metadata infrastructure, Resource Description Framework (RDF) should not have these limitations and it is the intent of the DSig working group that "include" and "exclude" not be present in the DSig 2.0 specification, which will build on RDF.
extension (optional "http://www.w3.org/TR/1998/REC-DSig-label/sigblock-1_0"
("AttribInfo"
("http://www.w3.org/PICS/DSig/X509-1_0" "base64-x.509-cert")
("http://www.w3.org/PICS/DSig/X509-1_0"
"http://SomeCa/Certs/ByDN/CN=PeterLipp,O=TU-Graz,OU=IAIK")
("http://www.w3.org/PICS/DSig/pgpcert-1_0" "base64-pgp-signed-key")
("http://www.w3.org/PICS/DSig/pgpcert-1_0"
"http://pgp.com/certstore/plipp@iaik.tu-graz.ac.at"))
("Signature" "http://www.w3.org/TR/1998/REC-DSig-label/RSA-MD5-1_0"
("byKey" (("N" "aba21241241=")
("E" "abcdefghijklmnop=")))
("on" "1996-12-02T22:20-0000")
("exclude" (("extensions" "http://foo/badextension")))
("SigCrypto" "aba1241241=="))
("Signature" "http://www.w3.org/TR/1998/REC-DSig-label/DSS-1_0"
("ByName" "plipp@iaik.tu-graz.ac.at")
("on" "1996-12-02T22:20-0000")
("SigCrypto" (("R" "aba124124156")
("S" "casdfkl3r489")))))
SignatureExtension ::= 'extension ( optional'
SigBlockURL AttributionInfo Signature* ')'
SigBlockURL ::= '"http://www.w3.org/TR/1998/REC-DSig-label/sigblock-1_0"'
AttributionInfo ::= '(' '"AttribInfo"' Certificate* ')'
Certificate ::= '(' CertificateFamilyID CertificateData ')'
CertificateFamilyID ::= quotedUrl
CertificateData ::= quotedBase64String | quotedUrl
Signature ::= '( "Signature"' SignatureSuiteID SigData+ ')'
SigData ::= '(' SigTokenString SigInfo ')'
SigTokenString ::= quotedName
SigInfo ::= SigData | quotedURL | quoted-ISO-date | quotedBase64String
| quotedName | number | '(' SigInfo+ ')'
SignatureSuiteID ::= quotedUrl
quotedURL ::= '"' URL '"'
URL ::= as defined by RFC-1738.
quotedBase64String ::= '"' base64String '"'
base64String ::= as defined in RFC-1521.
alpha ::= 'A' | .. | 'Z' | 'a' | .. | 'z'
digit ::= '0' | .. | '9'
quotedName ::= '"' ( urlChar | ' ')+ '"'
urlChar ::= alphaNumPM | '.' | '$' | ',' | ';' | ':'
| '&' | '=' | '?' | '!' | '*' | '~' | '@'
| '#' | '_' | '(' | ')' | '/' | '%' hex hex
; Note: Use the "%" escape technique to insert
; single or double quotation marks within a URL
alphaNumPM ::= alpha | digit | sign
hex ::= digit | 'A' | .. | 'F' | 'a' | .. | 'f'
sign ::= '+' / '-'
number ::= [sign]unsignedInt['.' [unsignedInt]]
unsignedInt ::= digit+
quoted-ISO-date ::= '"' YYYY sep MM sep DD 'T' hh ':' mm[':' ss['.' f+]] Stz '"'
based on the PICS-defined ISO 8601:1988 date and time format, restricted
to the specific form described here:
sep ::= '.' | '-'
YYYY ::= four-digit year
MM ::= two-digit month (01=January, etc.)
DD ::= two-digit day of month (01 through 31)
hh ::= two digits of hour (00 through 23) (am/pm NOT allowed)
mm ::= two digits of minute (00 through 59)
ss ::= two digits of second (00 through 59), optional
f ::= digit(s) of fractions of second, optional
S ::= sign of time zone offset from UTC ('+' or '-')
tz ::= four digit amount of offset from UTC
(e.g., 1512 means 15 hours and 12 minutes)
For example, "1994-11-05T08:15-0500" is a valid quoted-ISO-date
denoting November 5, 1994, 8:15 am, US Eastern Standard Time
Notes:
1. The ISO 8601:1988 date and time format standard allows considerably
greater flexibility than that described here. DSig requires precisely
the syntax described here -- neither the time nor the time zone may
be omitted, none of the alternate ISO formats are permitted, and
the punctuation must be as specified here, Except:
2. ISO date described here differs from the PICS 1.1 and ISO 8601:1988
date and time format. PICS 1.1 uses '.' as separators while the ISO
standard calls for '-'. DSig supports both syntaxes. PICS 1.1 also
does not support the optional seconds and fractions of seconds fields
and permits minutes to range from 0 to 60.
(PICS-1.1
<service 1 url> [service 1 option...]
labels [label 1 options...] [label 1 signature]
ratings (<category> <value> ...)
[label 2 options...] [label 2 signature]
ratings (<category> <value> ...)
...
<service 2 url> [service 2 option...]
labels [label 3 options...] [label 3 signature]
ratings (<category> <value> ...)
[label 4 options...] [label 4 signature]
ratings (<category> <value> ...)
...
...
)
(PICS-1.1
<service 2 url>
labels [service 2 option...] OVERRIDDEN BY [label 4 option...]
ratings ([label 4 ratings ...]))
This is not yet an equivalent standalone label. We still
need to take into account any modifications denoted by "include"
or "exclude" specifiers in the
sigblock
extension.
(If the signature is being created the application knows which
fields it wants to include in or exclude from the equivalent
standalone label. The "include" and "exclude" options convey this
information to applications trying to verify the signature.) The
resulting label list is the equivalent standalone label.
Step 1: creates a PICS 1.1 label
(PICS-1.1 "http://www.gcf.org/v2.5"
by "John Doe"
labels
for "http://www.w3.org/PICS/DSig/Overview"
on "1994.11.05T08:15-0500"
ratings (suds 0.5 density 0 color 1))
Step 2: compute the hashes of the document, create the
resinfo
extension, and insert it in the label
(PICS-1.1 "http://www.gcf.org/v2.5"
by "John Doe"
labels
for "http://www.w3.org/PICS/DSig/Overview"
extension
(optional "http://www.w3.org/TR/1998/REC-DSig-label/resinfo-1_0"
("http://www.w3.org/TR/1998/REC-DSig-label/SHA1-1_0" "aba21241241=")
("http://www.w3.org/TR/1998/REC-DSig-label/MD5-1_0" "cdc43463463="
"1997-02-05T08:15-0500"))
on "1994.11.05T08:15-0500"
ratings (suds 0.5 density 0 color 1))
Step 3: canonicalize the label ( PICS-1.1 "http://www.gcf.org/v2.5" l by "John Doe" extension ( optional "http://www.w3.org/TR/1998/REC-DSig-label/resinfo-1_0" ( "http://www.w3.org/TR/1998/REC-DSig-label/MD5-1_0" "cdc43463463=" "1997-02-05T08:15-0500" ) ( "http://www.w3.org/TR/1998/REC-DSig-label/SHA1-1_0" "aba21241241=" ) ) for "http://www.w3.org/PICS/DSig/Overview" on "1994.11.05T08:15-0500" r ( color 1 density 0 suds 0.5 ) )Step 4: sign the canonicalized form of the label and insert it in the label
(PICS-1.1 "http://www.gcf.org/v2.5"
by "John Doe"
labels
for "http://www.w3.org/PICS/DSig/Overview"
extension
(optional "http://www.w3.org/TR/1998/REC-DSig-label/resinfo-1_0"
("http://www.w3.org/TR/1998/REC-DSig-label/SHA1-1_0" "aba21241241=")
("http://www.w3.org/TR/1998/REC-DSig-label/MD5-1_0" "cdc43463463="
"1997-02-05T08:15-0500"))
extension
(optional "http://www.w3.org/TR/1998/REC-DSig-label/sigblock-1_0"
("AttribInfo"
("http://www.w3.org/PICS/DSig/X509-1_0" "efe64685685=")
("http://www.w3.org/PICS/DSig/X509-1_0"
"http://SomeCA/Certs/ByDN/CN=PeterLipp,O=TU-Graz,OU=IAIK")
("http://www.w3.org/PICS/DSig/pgpcert-1_0" "ghg86807807=")
("http://www.w3.org/PICS/DSig/pgpcert-1_0"
"http://pgp.com/certstore/plipp@iaik.tu-graz.ac.at"))
("Signature" "http://www.w3.org/TR/1998/REC-DSig-label/RSA-MD5-1_0"
("byKey" (("N" "aba212412412=")
("E" "3jdg93fj")))
("on" "1996-12-02T22:20-0000")
("SigCrypto" "3j9fsaJ30SD=")))
on "1994.11.05T08:15-0500"
ratings (suds 0.5 density 0 color 1))
And now we have a valid DSig-1.0 label.
If this is a concern, a simple policy in the trust engine that evaluates signatures could be established to require a separate signature label on the service description file.
Labels may also exist on their own, referenced via a URL. When the URL is de-referenced it returns an item of type application/pics-labels that contains a label list.
The specifications for embedding a PICS label in an HTML document are well defined. It is possible to use DSig labels in document other than HTML. To do this, a specification for how the label is embedded in that document type and how the document is normalized for hashing into the label must be created.
Philip
DesAutels
Formerly: Project Manager, Technology and Society Domain, W3
Consortium
Current Address:
Senior Principal Architect
MatchLogic, Inc.
400 S. McCaslin Blvd.
Louisville, Colorado 80027
Email:
philipd@matchlogic.com
Brian
LaMacchia
Microsoft Corporation
One Microsoft Way
Redmond, WA 98052-6399
Email:
bal@microsoft.com
Peter Lipp
IAIK, University of Technology, Graz
Institute for Applied Information Processing and
Communications
Klosterwiesgasse 32/I, A-8010 Graz, Austria
Email:
plipp@iaik.tu-graz.ac.at