@@ -31,52 +31,52 @@ generate_key() {
3131 local key_type=$1
3232 local key_param=$2
3333 local key_name=$3
34-
34+
3535 echo " Generating $key_type key pair ($key_name )..."
36-
36+
3737 # Create batch configuration for GPG
3838 local batch_file=" $TEMP_DIR /batch_${key_name} .txt"
3939 cat > " $batch_file " << EOF
4040%no-protection
4141Key-Type: $key_type
4242EOF
43-
43+
4444 # Add key-specific parameters
4545 case " $key_type " in
46- RSA|DSA )
46+ RSA)
4747 echo " Key-Length: $key_param " >> " $batch_file "
4848 ;;
4949 ecdsa|eddsa)
5050 echo " Key-Curve: $key_param " >> " $batch_file "
5151 ;;
5252 esac
53-
53+
5454 cat >> " $batch_file " << EOF
5555Name-Real: $TEST_USER_NAME
5656Name-Email: test-${key_name} @example.com
5757Expire-Date: 0
5858%commit
5959EOF
60-
60+
6161 # Generate the key
6262 gpg --batch --generate-key " $batch_file " 2>&1
63-
63+
6464 # Get the key ID
6565 local key_id
6666 key_id=$( gpg --list-keys --with-colons " test-${key_name} @example.com" | grep ' ^fpr' | head -1 | cut -d: -f10)
67-
67+
6868 echo " Key ID: $key_id "
69-
69+
7070 # Export public key
7171 gpg --armor --export " test-${key_name} @example.com" > " $SCRIPT_DIR /key_${key_name} .pub"
7272 echo " ✓ key_${key_name} .pub created"
73-
73+
7474 # Export secret key (for signing)
7575 gpg --armor --export-secret-keys " test-${key_name} @example.com" > " $TEMP_DIR /${key_name} .sec"
76-
76+
7777 # Store key ID for later use
7878 echo " $key_id " > " $TEMP_DIR /${key_name} _id.txt"
79-
79+
8080 rm -f " $batch_file "
8181 echo " ✓ $key_name key pair generated successfully"
8282}
8585create_signed_object () {
8686 local object_type=$1
8787 local key_name=$2
88-
88+
8989 echo " Creating signed $object_type for $key_name ..."
90-
90+
9191 # Get key ID
9292 local key_id
9393 key_id=$( cat " $TEMP_DIR /${key_name} _id.txt" )
94-
94+
9595 # Create temporary Git repository
9696 local repo_dir=" $TEMP_DIR /repo_${key_name} _${object_type} "
9797 mkdir -p " $repo_dir "
9898 cd " $repo_dir "
99-
99+
100100 git init
101101 git config user.name " $TEST_USER_NAME "
102102 git config user.email " $TEST_USER_EMAIL "
103103 git config gpg.program gpg
104104 git config user.signingkey " $key_id "
105-
105+
106106 # Import the secret key for signing
107107 gpg --batch --import " $TEMP_DIR /${key_name} .sec" 2> /dev/null
108-
108+
109109 # Create file and commit
110110 echo " Test content for $key_name $object_type " > test.txt
111111 git add test.txt
112112 git commit -m " Test commit for $object_type "
113-
113+
114114 if [[ " $object_type " == " commit" ]]; then
115115 # Sign the commit (amend)
116116 git commit --amend --allow-empty -S -m " Test commit signed with $key_name "
117-
117+
118118 # Verify the signed commit
119119 echo " Verifying signed commit..."
120120 git verify-commit HEAD 2>&1 | grep -q " Good signature"
121121 echo " ✓ Commit signature verified successfully"
122-
122+
123123 # Export commit object
124124 git cat-file commit HEAD > " $SCRIPT_DIR /commit_${key_name} _signed.txt"
125125 cd " $SCRIPT_DIR "
@@ -128,12 +128,12 @@ create_signed_object() {
128128 elif [[ " $object_type " == " tag" ]]; then
129129 # Create and sign tag
130130 git tag -a " test-tag-${key_name} " -m " Test tag signed with $key_name " -s
131-
131+
132132 # Verify the signed tag
133133 echo " Verifying signed tag..."
134134 git verify-tag " test-tag-${key_name} " 2>&1 | grep -q " Good signature"
135135 echo " ✓ Tag signature verified successfully"
136-
136+
137137 # Export tag object
138138 git cat-file tag " test-tag-${key_name} " > " $SCRIPT_DIR /tag_${key_name} _signed.txt"
139139 cd " $SCRIPT_DIR "
@@ -144,64 +144,61 @@ create_signed_object() {
144144# Function to create unsigned commit
145145create_unsigned_commit () {
146146 echo " Creating unsigned commit..."
147-
147+
148148 # Create temporary Git repository
149149 local repo_dir=" $TEMP_DIR /repo_unsigned"
150150 mkdir -p " $repo_dir "
151151 cd " $repo_dir "
152-
152+
153153 git init
154154 git config user.name " $TEST_USER_NAME "
155155 git config user.email " $TEST_USER_EMAIL "
156-
156+
157157 # Create file and commit (without signature)
158158 echo " Test content unsigned" > test.txt
159159 git add test.txt
160160 git commit -m " Test commit unsigned"
161-
161+
162162 # Export commit object
163163 git cat-file commit HEAD > " $SCRIPT_DIR /commit_unsigned.txt"
164-
164+
165165 cd " $SCRIPT_DIR "
166166 echo " ✓ commit_unsigned.txt created"
167167}
168168
169169# Main program
170170main () {
171- echo " Step 1: Generate RSA/DSA keys..."
171+ echo " Step 1: Generate RSA keys..."
172172 echo " -----------------------------------"
173-
173+
174174 # RSA keys (different key lengths)
175175 generate_key " RSA" " 2048" " rsa_2048"
176176 generate_key " RSA" " 4096" " rsa_4096"
177-
178- # DSA key (legacy, but still supported)
179- generate_key " DSA" " 2048" " dsa_2048"
180-
177+
181178 echo " "
182179 echo " Step 2: Generate ECC keys..."
183180 echo " -----------------------------------"
184-
181+
185182 # ECDSA keys (different curves)
186183 generate_key " ecdsa" " NIST P-256" " ecdsa_p256"
187184 generate_key " ecdsa" " NIST P-384" " ecdsa_p384"
188185 generate_key " ecdsa" " NIST P-521" " ecdsa_p521"
189-
186+
190187 # Brainpool curves
191188 generate_key " ecdsa" " brainpoolP256r1" " brainpool_p256"
192189 generate_key " ecdsa" " brainpoolP384r1" " brainpool_p384"
193190 generate_key " ecdsa" " brainpoolP512r1" " brainpool_p512"
194-
191+
195192 # Ed25519 (modern elliptic curve)
196193 generate_key " eddsa" " Ed25519" " ed25519"
197-
194+
198195 # Ed448 (less common)
199196 generate_key " eddsa" " Ed448" " ed448"
200-
197+
201198 echo " "
202199 echo " Step 3: Create signed commits..."
203200 echo " ----------------------------------------"
204-
201+
205202 # Get list of successfully generated keys
206203 local keys=() key_name=" "
207204 for key_file in " $TEMP_DIR " /* _id.txt; do
@@ -210,32 +207,32 @@ main() {
210207 keys+=(" $key_name " )
211208 fi
212209 done
213-
210+
214211 # Signed commits for each key type
215212 for key_name in " ${keys[@]} " ; do
216213 create_signed_object " commit" " $key_name "
217214 done
218-
215+
219216 echo " "
220217 echo " Step 4: Create signed tags..."
221218 echo " -------------------------------------"
222-
219+
223220 # Signed tags for each key type
224221 for key_name in " ${keys[@]} " ; do
225222 create_signed_object " tag" " $key_name "
226223 done
227-
224+
228225 echo " "
229226 echo " Step 5: Create unsigned commit..."
230227 echo " ------------------------------------------"
231-
228+
232229 create_unsigned_commit
233-
230+
234231 echo " "
235232 echo " === Cleanup ==="
236233 rm -rf " $TEMP_DIR "
237234 echo " Temporary directory removed"
238-
235+
239236 echo " "
240237 echo " === Done! ==="
241238 echo " All test fixtures have been successfully created."
0 commit comments