001: /*
002: * Copyright (c) 2007, intarsys consulting GmbH
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * - Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * - Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * - Neither the name of intarsys nor the names of its contributors may be used
015: * to endorse or promote products derived from this software without specific
016: * prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
028: * POSSIBILITY OF SUCH DAMAGE.
029: */
030: package de.intarsys.pdf.crypt;
031:
032: import de.intarsys.pdf.cos.COSBasedObject;
033: import de.intarsys.pdf.cos.COSDictionary;
034: import de.intarsys.pdf.cos.COSName;
035: import de.intarsys.pdf.cos.COSObject;
036: import de.intarsys.pdf.st.STXRefSection;
037:
038: /**
039: * The definition of the document encryption.
040: *
041: * <p>
042: * This object contains the state information defining the context for the
043: * document encryption.
044: * </p>
045: */
046: public class COSEncryption extends COSBasedObject {
047: /**
048: * The meta class implementation
049: */
050: public static class MetaClass extends COSBasedObject.MetaClass {
051: protected MetaClass(Class instanceClass) {
052: super (instanceClass);
053: }
054: }
055:
056: public static final COSName DK_Filter = COSName.constant("Filter"); //$NON-NLS-1$
057:
058: public static final COSName DK_SubFilter = COSName
059: .constant("SubFilter"); //$NON-NLS-1$
060:
061: public static final COSName DK_V = COSName.constant("V"); //$NON-NLS-1$
062:
063: public static final COSName DK_Length = COSName.constant("Length"); //$NON-NLS-1$
064:
065: public static final COSName DK_CF = COSName.constant("CF"); //$NON-NLS-1$
066:
067: public static final COSName CN_IDENTITY = COSName
068: .constant("Identity"); //$NON-NLS-1$
069:
070: public static final COSName DK_StmF = COSName.constant("StmF"); //$NON-NLS-1$
071:
072: public static final COSName DK_EFF = COSName.constant("EEF"); //$NON-NLS-1$
073:
074: public static final COSName DK_StrF = COSName.constant("StrF"); //$NON-NLS-1$
075:
076: /** The meta class instance */
077: public static final MetaClass META = new MetaClass(MetaClass.class
078: .getDeclaringClass());
079:
080: protected COSEncryption(COSObject object) {
081: super (object);
082: }
083:
084: public static COSEncryption getEncryptionIn(
085: STXRefSection xRefSection) {
086: return (COSEncryption) COSEncryption.META
087: .createFromCos(xRefSection.cosGetEncryption());
088: }
089:
090: public void setEncryptionIn(STXRefSection xRefSection) {
091: xRefSection.cosSetEncryption(cosGetObject());
092: }
093:
094: public COSName getFilter() {
095: return cosGetField(DK_Filter).asName();
096: }
097:
098: /**
099: * The length of the encryption key, in bits. The value must be a multiple
100: * of 8, in the range 40 to 128. Default value: 40.
101: *
102: * @return length of the encryption key, in bits
103: */
104: public int getLength() {
105: return getFieldInt(DK_Length, 40);
106: }
107:
108: /*
109: * (non-Javadoc)
110: *
111: * @see de.intarsys.pdf.cos.COSBasedObject#initializeFromCos()
112: */
113: protected void initializeFromCos() {
114: super .initializeFromCos();
115: cosGetDict().getIndirectObject().setEncryptOnWrite(false);
116: }
117:
118: public COSName getCryptFilterNameString() {
119: COSName name = cosGetField(DK_StrF).asName();
120: if (name == null) {
121: return CN_IDENTITY;
122: }
123: return name;
124: }
125:
126: public COSName getCryptFilterNameStream() {
127: COSName name = cosGetField(DK_StmF).asName();
128: if (name == null) {
129: return CN_IDENTITY;
130: }
131: return name;
132: }
133:
134: public COSName getCryptFilterNameFile() {
135: COSName name = cosGetField(DK_EFF).asName();
136: if (name == null) {
137: return CN_IDENTITY;
138: }
139: return name;
140: }
141:
142: public COSDictionary getCryptFilterDict(COSName name) {
143: if (CN_IDENTITY.equals(name)) {
144: // can't redefine...
145: return null;
146: }
147: COSDictionary cryptFilters = cosGetField(COSEncryption.DK_CF)
148: .asDictionary();
149: if (cryptFilters == null) {
150: return null;
151: }
152: return cryptFilters.get(name).asDictionary();
153: }
154:
155: public int getVersion() {
156: return getFieldInt(DK_V, 0);
157: }
158: }
|