1   /****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  package org.apache.james.jdkim;
21  
22  import org.apache.james.jdkim.api.SignatureRecord;
23  import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
24  
25  import junit.framework.TestCase;
26  
27  public class SignatureRecordTest extends TestCase {
28  
29      public void testBasic() {
30          SignatureRecord sign = new SignatureRecordImpl(
31                  "v=1; a=rsa-sha256; c=relaxed/relaxed;\r\n"
32                          + "        d=gmail.com; s=beta;\r\n"
33                          + "        h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
34                          + "        bh=9sd6eO/xnGLInYGPFN86r9q27iClGpwfkl4PBc5XEuQ=;\r\n"
35                          + "        b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
36          sign.validate();
37      }
38  
39      public void testWrongOrMissingVersion() {
40          try {
41              SignatureRecord sign = new SignatureRecordImpl(
42                      "a=rsa-sha1; c=relaxed/relaxed;\r\n"
43                              + "        d=gmail.com; s=beta;\r\n"
44                              + "        h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
45                              + "        b=Kw/TqnjB4L5ZC7DX1ibiNkuIw630uHZvzuozn/e6yTm3U8ObWEz/rJK5GO8RSrF56JrCA/xo8W2CGmyNmpQYbEpLl5P9/NcJSYUmln/O6GSa4Usyv4FdEU4FVjkyW0ToGFHNkw9Mm0urveA4Lcfk9gClJczXnvGBdiv/bkVBEJk=");
46              sign.validate();
47              fail("expected error on missing v=");
48          } catch (IllegalStateException e) {
49          }
50          try {
51              SignatureRecord sign = new SignatureRecordImpl(
52                      "v=2; a=rsa-sha256; c=relaxed/relaxed;\r\n"
53                              + "        d=gmail.com; s=beta;\r\n"
54                              + "        h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
55                              + "        bh=9sd6eO/xnGLInYGPFN86r9q27iClGpwfkl4PBc5XEuQ=;\r\n"
56                              + "        b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
57              sign.validate();
58              fail("expected error on wrong v=");
59          } catch (IllegalStateException e) {
60          }
61      }
62  
63      public void testMissingRequired() {
64          try {
65              SignatureRecord sign = new SignatureRecordImpl(
66                      "v=1; a=rsa-sha256; c=relaxed/relaxed;\r\n"
67                              + "        d=gmail.com; s=beta;\r\n"
68                              + "        h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
69                              + "        b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
70              sign.validate();
71              fail("expected error on missing bh=");
72          } catch (IllegalStateException e) {
73          }
74      }
75  
76      public void testDomainMismatch() {
77          try {
78              SignatureRecord sign = new SignatureRecordImpl(
79                      "v=1; a=rsa-sha256; c=relaxed/relaxed;\r\n"
80                              + "        d=gmail.com; s=beta; i=@agmail.com;\r\n"
81                              + "        h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
82                              + "        bh=9sd6eO/xnGLInYGPFN86r9q27iClGpwfkl4PBc5XEuQ=;\r\n"
83                              + "        b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
84              sign.validate();
85              fail("expected error on domain mismatch");
86          } catch (IllegalStateException e) {
87          }
88      }
89  
90      public void testMissingFrom() {
91          try {
92              SignatureRecord sign = new SignatureRecordImpl(
93                      "v=1; a=rsa-sha256; c=relaxed/relaxed;\r\n"
94                              + "        d=gmail.com; s=beta; i=@subdomain.gmail.com;\r\n"
95                              + "        h=domainkey-signature:received:received:message-id:date:fram:to:subject:mime-version:content-type;\r\n"
96                              + "        bh=9sd6eO/xnGLInYGPFN86r9q27iClGpwfkl4PBc5XEuQ=;\r\n"
97                              + "        b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
98              sign.validate();
99              fail("expected error on missing 'from' header");
100         } catch (IllegalStateException e) {
101         }
102     }
103 
104 }