Lines 1-39
Link Here
|
1 |
/* PKCS7.java -- |
1 |
/* PKCS7.java -- |
2 |
Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc. |
2 |
Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc. |
3 |
|
3 |
|
4 |
This file is a part of GNU Classpath. |
4 |
This file is a part of GNU Classpath. |
5 |
|
5 |
|
6 |
GNU Classpath is free software; you can redistribute it and/or modify |
6 |
GNU Classpath is free software; you can redistribute it and/or modify |
7 |
it under the terms of the GNU General Public License as published by |
7 |
it under the terms of the GNU General Public License as published by |
8 |
the Free Software Foundation; either version 2 of the License, or (at |
8 |
the Free Software Foundation; either version 2 of the License, or (at |
9 |
your option) any later version. |
9 |
your option) any later version. |
10 |
|
10 |
|
11 |
GNU Classpath is distributed in the hope that it will be useful, but |
11 |
GNU Classpath is distributed in the hope that it will be useful, but |
12 |
WITHOUT ANY WARRANTY; without even the implied warranty of |
12 |
WITHOUT ANY WARRANTY; without even the implied warranty of |
13 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 |
General Public License for more details. |
14 |
General Public License for more details. |
15 |
|
15 |
|
16 |
You should have received a copy of the GNU General Public License |
16 |
You should have received a copy of the GNU General Public License |
17 |
along with GNU Classpath; if not, write to the Free Software |
17 |
along with GNU Classpath; if not, write to the Free Software |
18 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 |
18 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 |
19 |
USA |
19 |
USA |
20 |
|
20 |
|
21 |
Linking this library statically or dynamically with other modules is |
21 |
Linking this library statically or dynamically with other modules is |
22 |
making a combined work based on this library. Thus, the terms and |
22 |
making a combined work based on this library. Thus, the terms and |
23 |
conditions of the GNU General Public License cover the whole |
23 |
conditions of the GNU General Public License cover the whole |
24 |
combination. |
24 |
combination. |
25 |
|
25 |
|
26 |
As a special exception, the copyright holders of this library give you |
26 |
As a special exception, the copyright holders of this library give you |
27 |
permission to link this library with independent modules to produce an |
27 |
permission to link this library with independent modules to produce an |
28 |
executable, regardless of the license terms of these independent |
28 |
executable, regardless of the license terms of these independent |
29 |
modules, and to copy and distribute the resulting executable under |
29 |
modules, and to copy and distribute the resulting executable under |
30 |
terms of your choice, provided that you also meet, for each linked |
30 |
terms of your choice, provided that you also meet, for each linked |
31 |
independent module, the terms and conditions of the license of that |
31 |
independent module, the terms and conditions of the license of that |
32 |
module. An independent module is a module which is not derived from |
32 |
module. An independent module is a module which is not derived from |
33 |
or based on this library. If you modify this library, you may extend |
33 |
or based on this library. If you modify this library, you may extend |
34 |
this exception to your version of the library, but you are not |
34 |
this exception to your version of the library, but you are not |
35 |
obligated to do so. If you do not wish to do so, delete this |
35 |
obligated to do so. If you do not wish to do so, delete this |
36 |
exception statement from your version. */ |
36 |
exception statement from your version. */ |
37 |
|
37 |
|
38 |
|
38 |
|
39 |
package gnu.javax.crypto.pad; |
39 |
package gnu.javax.crypto.pad; |
Lines 45-71
Link Here
|
45 |
import java.util.logging.Logger; |
45 |
import java.util.logging.Logger; |
46 |
|
46 |
|
47 |
/** |
47 |
/** |
48 |
* <p>The implementation of the PKCS7 padding algorithm.</p> |
48 |
* The implementation of the PKCS7 padding algorithm. |
49 |
* |
49 |
* <p> |
50 |
* <p>This algorithm is described for 8-byte blocks in [RFC-1423] and extended to |
50 |
* This algorithm is described for 8-byte blocks in [RFC-1423] and extended to |
51 |
* block sizes of up to 256 bytes in [PKCS-7].</p> |
51 |
* block sizes of up to 256 bytes in [PKCS-7]. |
52 |
* |
52 |
* <p> |
53 |
* References:<br> |
53 |
* References: |
54 |
* <a href="http://www.ietf.org/rfc/rfc1423.txt">RFC-1423</a>: Privacy |
54 |
* <ol> |
|
|
55 |
* <li><a href="http://www.ietf.org/rfc/rfc1423.txt">RFC-1423</a>: Privacy |
55 |
* Enhancement for Internet Electronic Mail: Part III: Algorithms, Modes, and |
56 |
* Enhancement for Internet Electronic Mail: Part III: Algorithms, Modes, and |
56 |
* Identifiers.<br> |
57 |
* Identifiers.</li> |
57 |
* <a href="http://www.ietf.org/">IETF</a>. |
58 |
* <li><a href="http://www.ietf.org/">IETF</a>.</li> |
58 |
* <a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-7/">[PKCS-7]</a>PKCS #7: |
59 |
* <li><a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-7/">[PKCS-7]</a> |
59 |
* Cryptographic Message Syntax Standard - An RSA Laboratories Technical Note.<br> |
60 |
* PKCS #7: Cryptographic Message Syntax Standard - An RSA Laboratories |
60 |
* <a href="http://www.rsasecurity.com/">RSA Security</a>.<p> |
61 |
* Technical Note.</li> |
|
|
62 |
* <li><a href="http://www.rsasecurity.com/">RSA Security</a>.</li> |
63 |
* </ol> |
61 |
*/ |
64 |
*/ |
62 |
public final class PKCS7 extends BasePad |
65 |
public final class PKCS7 |
|
|
66 |
extends BasePad |
63 |
{ |
67 |
{ |
64 |
private static final Logger log = Logger.getLogger(PKCS7.class.getName()); |
68 |
private static final Logger log = Logger.getLogger(PKCS7.class.getName()); |
65 |
|
69 |
|
66 |
/** |
70 |
/** |
67 |
* Trivial package-private constructor for use by the <i>Factory</i> class.<p> |
71 |
* Trivial package-private constructor for use by the <i>Factory</i> class. |
68 |
* |
72 |
* |
69 |
* @see PadFactory |
73 |
* @see PadFactory |
70 |
*/ |
74 |
*/ |
71 |
PKCS7() |
75 |
PKCS7() |
Lines 73-104
Link Here
|
73 |
super(Registry.PKCS7_PAD); |
77 |
super(Registry.PKCS7_PAD); |
74 |
} |
78 |
} |
75 |
|
79 |
|
76 |
// Class methods |
|
|
77 |
// ------------------------------------------------------------------------- |
78 |
|
79 |
// Implementation of abstract methods in BasePad |
80 |
// ------------------------------------------------------------------------- |
81 |
|
82 |
public void setup() |
80 |
public void setup() |
83 |
{ |
81 |
{ |
84 |
if (blockSize < 2 || blockSize > 256) |
82 |
if (blockSize < 2 || blockSize > 256) |
85 |
{ |
83 |
throw new IllegalArgumentException(); |
86 |
throw new IllegalArgumentException(); |
|
|
87 |
} |
88 |
} |
84 |
} |
89 |
|
85 |
|
90 |
public byte[] pad(byte[] in, int offset, int length) |
86 |
public byte[] pad(byte[] in, int offset, int length) |
91 |
{ |
87 |
{ |
92 |
int padLength = blockSize; |
88 |
int padLength = blockSize; |
93 |
if (length % blockSize != 0) |
89 |
if (length % blockSize != 0) |
94 |
{ |
90 |
padLength = blockSize - length % blockSize; |
95 |
padLength = blockSize - length % blockSize; |
|
|
96 |
} |
97 |
byte[] result = new byte[padLength]; |
91 |
byte[] result = new byte[padLength]; |
98 |
for (int i = 0; i < padLength;) |
92 |
for (int i = 0; i < padLength;) |
99 |
{ |
93 |
result[i++] = (byte) padLength; |
100 |
result[i++] = (byte) padLength; |
|
|
101 |
} |
102 |
if (Configuration.DEBUG) |
94 |
if (Configuration.DEBUG) |
103 |
log.fine("padding: 0x" + Util.toString(result)); |
95 |
log.fine("padding: 0x" + Util.toString(result)); |
104 |
return result; |
96 |
return result; |
Lines 110-123
Link Here
|
110 |
int limit = offset + length; |
102 |
int limit = offset + length; |
111 |
int result = in[limit - 1] & 0xFF; |
103 |
int result = in[limit - 1] & 0xFF; |
112 |
for (int i = 0; i < result; i++) |
104 |
for (int i = 0; i < result; i++) |
113 |
{ |
105 |
if (result != (in[--limit] & 0xFF)) |
114 |
if (result != (in[--limit] & 0xFF)) |
106 |
throw new WrongPaddingException(); |
115 |
{ |
|
|
116 |
throw new WrongPaddingException(); |
117 |
} |
118 |
} |
119 |
if (Configuration.DEBUG) |
107 |
if (Configuration.DEBUG) |
120 |
log.fine("padding length: " + result); |
108 |
log.fine("padding length: " + result); |
121 |
return result; |
109 |
return result; |
122 |
} |
110 |
} |
123 |
} |
111 |
} |